프로그래밍 학습주간
- 이번주는 쭉 프로그래밍 관련 TIL을 작성할 것 같다.
구조체와 클래스 추가 정리
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을 수정하는 방법을 알아서 너무 좋다.