나 개발자 진짜 되냐?

[ 10月 14日 ] 오늘 내가 배운 것 _ 20日次 [ C# 문법 ] 본문

오늘 공부를 정리해봐요!

[ 10月 14日 ] 오늘 내가 배운 것 _ 20日次 [ C# 문법 ]

Snow Rabbit 2024. 10. 14. 23:29

 

오늘은 수준별 수업을 시작했다.

 

수준별 내용은 TIL에 정리하려고 한다.

 

오늘은 C#문법 복습을 해보았다!

 

정리해보쟈!

 


시작하기 전에

모든 것은

?

가 중요하다.

왜 쓸까? 자주 쓰는 데는 이유가 있으니 그 왜를 생각해 보자

 

 

 

1. 클래스

왜?!

데이터와 메서드를 묶어서 관리하기 위해 사용!

상호작용을 위해!!!

 

 

이렇게 묶인 상태로 생성(동적할당) 되는 것을

객체 = 오브젝트 = 인스턴스

 

클래스 >>  붕어빵틀

인스턴스 >> 붕어빵

 

쉬운 예시로

class Human

{

void sleep(){}

}

 

라고 해서 우리는

Human.sleep();는 안된다.

사람이 잔다.

무슨 사람인가...!!

 

그래서 우리는 사람을 하나 만들어준다.

Human Cha = new Human;

이렇게 해주면

Cha.sleep();

하면 차친구가 자게 된다.

 

하지만 가끔 Human.sleep();도 있던데요?

 

네!

그런 경우 거의

static을 클래스 앞에 써서 클래스 자체를 변수로 볼 수 있게 한다.

 그래서 스태틱함수를 쓰면 클래스 자체를 쓸 수 있다.

 

=> 보통 그래서

static GameManager Instance 

이렇게 써줘서

유일무이한 친구를 싱글톤을 활용해 이렇게 사용한다.

 

 

근데 그 이외는 클래스. 함수().함수() 안된다.

 

필드 : 데이터, 메서드 : 함수

생성자 : 초기화 함수 / 클래스랑 이름이 같은 게 매력

=> 인스턴스 생성 시 인수를 받아야 하는 게 특징

생성자에 있는 매개변수는 _ 언더바 쓰세요!

 

this.name은 public일 때 굳이 안 써도 되고

그냥 Name = name으로 해도 되고

아니면 뭐

_name도 죠습니다.


2. 상속

왜?!

중복적인 코드를 줄이고 유연하게 대응하게 만들기 위해

 

상속은

부모 클래스의 구현을 따르되

추가적인 필드나 메서드를 정의하거나

부모의 클래스의 일부를 재정의 가능

 

비슷하면서도 다른,

공통적이 많은데 사용하면 너무 좋은 친구

+ 유지보수 좋다.

 

 

 

3. Virtual Override

왜?!

유연성 있게 만들기 위해

 

부모가 정의한 정의를 자식에서 변경해서 써야 할 경우

캐릭터가 직업별로 다른 방식으로 공격해야 하는 경우

 

Virtual

가상의, 임시, 버전 zero ( 그래서 강제성이 없다 )

 

Override

재정의, 덮어쓰기, 최최최종



Abstract 

이런 함수가 있어요! 근데 뭐 할지는 몰루!, 미완성,

 

( 강제성 있다. 그래서 오버라이딩 필수 )

 

Virtual과는 다르게 abstract만 있고 override가 없다면

얘는 오류가 난다.

 

abstract은

미완결 되었다는 느낌을 주기 때문에

꼭 override를 써주어야 한다.

 

미완결 느낌이라서 우리는

추상메서드라고 하고 그 추상메서드가 있으면

추상클래스 라고 한다.

 

 

마지막에 Mage를 생성하는데

만약에

Mage mage = New Character("ㅇㅅㅇ");

이 식은 안 먹힌다.

 

왜냐면 abstract이 있는 추상클래스이기 때문에

미완성이라서 사용 불가하다.

 

 

하지만

Character char = New Mage("ㅇㅅㅇ");

이 식은 먹힌다.

왜냐면

mage는 character을 상속받고 있기 때문이다.

 

 

아니 그럼 왜 씁니까??

저 식에서 SpecialMove 자체로도

큰 공통점이기 때문!

뭐 직업이 다양하거나, 또는 몬스터한테도 써야 된다면

이 함수하나만으로도 큰 공통점이기 때문이다.

 

 

 

두 코드에서 차이가 있듯

 

Virtual에서는 메서드를 만들어서

안에 값도 있고 그러는데

 abstract은 그냥 (); 이게 끝이다.

 

+

 

base.awake();이란

부모의 값을 받고 거기에 자식도 추가하는 것이다

그래서 부모값 + 자식값을 쓰려면 base

 

그리고

부모 따로 자식 따로 공격루트만 같고

출력이 다르다면 base를 쓰면 안 된다.

 

 

overloading / overriding

이 차이점은?

https://qua28.tistory.com/128

 

[ C# 기본 문법 16 ] 상속과 다형성

저번글에서는C#은 객체지향적 언어고다섯 가지 특징이 있다고 했었다. 캡슐화다형성상속추상화객체 그 중에서상속과 다형성에 대해 정리해보려고 한다. 상속과 다형성은객체지향에서 굉장

qua28.tistory.com

 

근데 이렇게 정리했다니..

나...

꽤 잘 정리했을 지도..?

 

4. Property

왜? 쓰나

필드를 열고 싶지만 직접 노출하기 싫을 때

 

다른 애들이 값을 안 바꿨으면 하는데..

뭐 보는 건 허락하지 뭐

아니면 뭐 수정도 허락하지, 뭐

그럴 때!

복잡한 접근제한자 설정을 하고 싶을 때

( 읽기는 public 쓰기는 private 등등 )

 

 

 

5. enum

왜?

숫자에 의미를 부여하기 위해

 

코드의 가독성을 높인다.

 

Idle : 1

Running : 2

Attacking : 3

Dead : 4

 

중간에 변수를 넣는 것은 좋지 않다.

그래서 중간에 변수를 넣을 거 같으면

숫자를 크게 크게 정하는 것이 좋다.

 

이렇게 숫자를 지정해 줄 수도 있다.

코드느낌으로 숫자를 넣어주면 좋다.

마지막에 count를 써주면

개수를 세어준다.

 

 

+ 추가

여러 개 데이터 정리하는 방법

! 콜랙션 !

 

배열 & 리스트

같은 타입을 여러 개 일 때

그래서 값을 찾을 때

O(N) 번 든다.

여기 있니? 여기있니? 여기있니?

아주 빠르게 인덱스로 찾을 수 있다.

몇 번째 원소 찾을 때 사용

 

딕셔너리

값을 통해서 빠르게 알고 싶을 때

O(1) 번 든다.

너! 여깄 구나!

값을 통해서 찾아야 하는 경우!

순서 상관없을 때!

 

6. Interface

왜?

공통점이 있는 대상을 표현하고 싶어서

 

추상클래스에서 더 나아가

모든 메서드가 추상메서드인 것

 

약속이라고 생각해 주면 좋다.

나 이러이러한 애들 데리고 있을 거야!

 

지금까지 클래스 상속 이야기를 하며

제일 중요한 것은

" 단일상속 "이다.

부모 하나 자식 여럿

 

인터페이스구현을 포함할 수 있긴 하지만

많은 개발자들 사이에서는 인터페이스에서는 구현을 포함하지 않는 것을 디폴트라고 합니다.

 

인터페이스를 상속하면 특정 메서드를 포함하는 것을 알게 한다.

 

여기서 특정메서드를 포함한다 라는 의미가

바로 구현이라고 한다.

 

 

그림을 보면

이제 IInteractable을 인터페이스로 선언하고

Interact();를 해주면

 이 인터페이스를 쓰는 애들 전부

Interact를 구현해주어야 한다.

 

유니티에서는 이 친구를

TryGetComponent

이렇게도 쓴다고 한다.

 

여기서 Try는 맞으면 ture 하고

아니면 false반환하는 느낌

 

7. 델리게이트

왜?

 

메서드를 변수처럼 쓰고 싶을 때

이벤트 기반으로 설계하고 싶을 때 = 옵서버 패턴

 

어떤 메서드들이 실행될지를

프로그램이 실행되면서 동적으로 결정시킬 수 있도록 만든 것

 

편하게 사용할 수 있도록 나온 것이

Action과 Func이다.

 

func는 return을 반환!

action은 return 없다!

Func < 아이템을 넣어서, bool을 반환해라 >

=> 이 친구는 람다 문법인데

item을 넣어서 실행하면 item.Price 가 큰지 작은지 리턴해라!

라는 의미다.

Input => Output인데

input에 값이 두 개 들어간다면 괄호가 두 개라는데...

지금은 하나라서 Item만 있는 거 같다.

 

나중에 람다에 대해 공부해 보자!

여기도 이 딸깍딸깍을 쓰려고 함수를 하나 더 만드는 거보다

이렇게 합쳐서 쓰는 걸 원한다.

 

그렇기 때문에 람다도 쓰고 뭐 함수도 합치고

이렇게 하는 것이 델리게이트라고 한다.

 

8. Event

왜?

이벤트 기반 설계를 만들기 위해

 

기본적으로 델리게이트는

이벤트를 구독하는 것도 자유고 발행하는 것도 자유롭기 때문에

 

public를 쓰는데도

내 클래스에서만 가능하도록 하는 것이 event이다.

 

 

 

옵서버 패턴이란!

이벤트 기반으로 설계할 때 활용되는 패턴

 

1. 주변애들이 계속 프레임마다 검사

지속적으로 업데이트가 되었는지 검사

 

2. 필요 없는데도 다 받아야 한다.

안 궁금한데도 받아야 한다.

 

 

 

Event Action

정말 어렵다..

자주 봐야 알 것 같다.

 

 

개인과제를 

인강보고 60퍼

인터넷 뒤적여서 20퍼

튜터님 힘 빌려서 10퍼

머리 좋은 인공지능 10퍼로

완성했다.

 

코드 짜는 건 정말 어렵다.

늘 내가 개발자가 될 수 있을까?를

생각한다.

 

....

 

 

되겠지?

 

주말 동안 공부한 내 흔적!

https://qua28.tistory.com/176

 

[ 10月 14日 ] 오늘 내가 배운 것 _ 20日次 [ 수준별 1 ]

오늘은 수준별 수업을 시작했다. 수준별 내용은 TIL에 정리하려고 한다. 오늘은 C#문법 복습을 해보았다! 정리해보쟈! 시작하기전에모든것은왜? 가 중요하다.왜 쓸까? 자주쓰는데는 이유가 있

qua28.tistory.com