내일배움캠프 8일차 TIL, C# 상속, 추상,인터페이스

황오영·2024년 4월 25일
0

TIL

목록 보기
8/56
post-thumbnail

프로그래밍 학습주간

  • 이번주는 쭉 프로그래밍 관련 TIL을 작성할 것 같다.

구조체와 클래스 추가 정리

  • 값과 참조타입에대한 이야기가 있고 좋은 내용이 있어 한번 정리 하려고한다.
  • class는 참조타입 strcut는 값타입이라고 얘기를 한다. 여기서 유니티에서 의문을 품었던 transform.position.x는 왜 수정이 불가능할까를 떠올렸다.
    (https://rito15.github.io/posts/cs-struct-property-indexer/) 블로그원본
  • transform은 class고 position은 구조체이다. 여기서부터 이 개념을 출발하고 이걸 명확히 알아야 한다.
struct Vector3
{
	public float x,y,z;
}
class Transform
{
	public Vector3 position
    {
    	get{return _position;}
        set{_position = value;}
    }
    private Vecctor3 _position;
}
  • 좀더 복잡하지만 이런식으로 보면
Transform transform = new Transform();

// [1]
transform.position = new Vector3();

// [2]
transform.position.x = 1f;
  • 위코드중 2번은 에러가 발생한다. 프로퍼티와 구조체의 성질을 같이 봐야하는데, 프transform.position으로 위치값을 받아오는 순간 구조체의 성질인 값을 받아오는 것 때문에 원본에 접근이 불가능해지고 _position의 원본값에 접근할 수 있는 방법이 없기 때문에 작동이 안되는 오류가 발생하는것이다. 혹은 position이 프로퍼티가 아닌 필드로 선언했다면 가능하긴 했을것이다.
  • 이러한 성질때문에 구조체의 경우 값을 수정하기 위해선 복사본을 생성하고 그 복사본을 원래 있는 자리에 대신 넣어줘야 하는 작업이 필요한 것이다.

상속, 추상, 인터페이스

상속: 객체지향 프로그래밍에서 부모클래스를 기준으로 새로운 파생클래스를 만드는것

추상 : 미완성된 클래스로 추상메소드를 포험하고 있다는것을 의미 abstract키워드를 사요한다. 자식클래스에서 공유할 수 있도록 하는것

  • 추상클래스는 추상화 생각하면 좋다. 대략적으로 큰 그림만 그려서 느낌만 보는것!

인터페이스 : 추상클래스처럼 완성되지 않은것이지만 추상화의 정도가 더 높다. 클래스가 구현해야하는 멤버들을 정의해 놓는것

추상과 인터페이스의 차이

  • 추상은 단일상속만 가능하다. 인터페이스는 다중상속이 가능하다.
  • 추상의 겨우 하위 객체가 코드를 재정의 하지 않아도 되지만 인터페이스의 경우 반드시 정의해 줘야해 작업량이 오히려 늘 수 도있다.
  • 두 방식 모두 결국 코드의 재사용성과 확장성을 가능하게한다.

오늘의 회고

  • 실수로 작성하다 안올려서 하루늦게 올리게 되서 조금 슬프다... 앞으론 확인 잘해서 맞게 올려야지 (작업하다 두번날려먹음 ㅎ)
  • 확실히 강의도 듣고 꾸준히 다양한 코딩을 접해 봤던것이랑 시너지를 일으켜 C#지식이 상승하는것이 느껴져 공부하는거 엄청 재미가 있다. 아직 완벽하게 활용하는 느낌은 아니지만 더 익숙해져서 코딩고수가 되기위해 노력해야겠다.
  • class와 구조체를 명확하게 이해해서 정말 뿌듯하다 특히나 transform을 수정하는 방법을 알아서 너무 좋다.
profile
게임개발을 꿈꾸는 개발자

0개의 댓글