728x90
반응형


16. 얕은 복사의 경우 메모리 주소를 복사하게 되어, 복사된 객체와 같은 주소의 데이터를 참조하게 됩니다. 그래서 복사한 객체의 값을 바꾸게 되면 원본값도 바뀌는 문제가 생길 수 있기때문에 주의해야합니다. 깊은 복사는 주소를 복사하여 참조하는 것이 아닌 해당 값 자체를 복사하기 때문에 복사한 값을 수정해도 원본 데이터는 변동이 생기지 않습니다.
=> 얕은 복사는 객체의 필드를 그대로 복사하지만, 참조형 필드의 경우 참조값만 복사되어 원본과 복사본이 내부 데이터를 공유하게 됩니다. 반면, 깊은 복사는 참조된 객체들까지 모두 재귀적으로 복사하여, 원본과 복사본이 완전히 독립적인 메모리를 가지게 됩니다. 이로 인해 깊은 복사는 더 안전하지만 구현과 성능 비용이 있습니다.

17. 박싱과 언박싱은 박싱은 값형을 참조형으로 바꾸는 것. 즉 스택 영역에 저장된 데이터를 힙 영역으로 옮기고 그 주소를 참조시키는 것이며, 언박싱은 반대로 참조형을 값형으로 바꾸는 것을 얘기한다. 박싱과 언박싱을 하게 되면 최적화적으로 매우 좋지 않은 영향을 주므로 조심해야 한다.
=>  박싱은 값 형식을 힙에 object로 래핑하여 참조 형식으로 변환하는 과정이며, 언박싱은 이를 다시 값 형식으로 추출하는 과정입니다. 이때 힙 할당, GC 부담, 타입 검사 등이 발생하기 때문에, 박싱/언박싱이 빈번할 경우 성능에 큰 영향을 줄 수 있습니다

18. 클래스 상속 방법으로는 클래스명 : 상속할 클래스명을 이용하여 상속을 받을 수 있다. 상속을 받게 되면 private 접근 제한자를 제외한 나머지 필드와 메서드를 접근할 수 있게된다. 단 private필드라고 해서 상속을 못 받는 것은아니다. 또한 abstract 클래스를 상속 받을 수 있으며, abstract 메서드나 프로퍼티의 경우 무조건 재정의를 해야 한다. virtual 메서드나 프로퍼티의 경우는 재정의를 할 수 있게 해둔 것이다.
=> "C#에서 클래스 상속은 : 문법을 사용하며, 파생 클래스는 기반 클래스의 public, protected, internal 멤버에 접근할 수 있습니다. 단, private 멤버는 상속되지만 직접 접근은 불가합니다. 또한 abstract 클래스는 구현을 강제하는 기반 타입으로, 파생 클래스는 abstract로 선언된 메서드나 속성을 반드시 override해야 하며, virtual 멤버는 선택적으로 재정의할 수 있도록 허용하는 기능입니다."

19. 다이아 문제가 발생하는 이유는 부모클래스 A를 상속받은 B C 가 있을 때 D가 B C를 상속받아 같은 부모 A를 참조하게 되는 경우 생기게 된다. C#의 경우는 다중 상속을 허용하지 않아 일단 다이아몬드 문제가 생길 수는 없다.
=> "다이아몬드 문제는 다중 상속 시 같은 기반 클래스가 여러 경로로 중복 상속되며 발생하는 모호성 문제입니다. 하지만 C#에서는 클래스의 다중 상속이 금지되어 있어 구조적으로 다이아몬드 문제가 발생하지 않습니다. 인터페이스만 다중 구현이 가능하며, 인터페이스는 상태를 가지지 않기 때문에 충돌이 발생하지 않습니다."

20. 인터페이스란 클래스와 달리 필드를 가질 수 없으며, 인터페이스만으로는 하나의 구조를 완성 할 수 없다. 클래스가 인터페이스를 구현하여 사용하게 만든 것이다.
=> 인터페이스는 클래스나 구조체가 구현해야 할 멤버들의 시그니처를 정의하는 계약입니다. 자체적으로 실행 로직이나 필드를 가질 수 없으며, 구현 클래스가 해당 인터페이스를 상속받아 모든 멤버를 구현해야 합니다. 인터페이스를 사용하면 구현과 호출을 분리할 수 있어 유연한 다형성 구조와 느슨한 결합이 가능해집니다

728x90
반응형

'프로그래밍 공부 > TIL' 카테고리의 다른 글

2025-07-17 TIL  (0) 2025.07.17
2025-07-15 TIL  (0) 2025.07.15
2025-07-10 TIL  (0) 2025.07.10
2025-07-09 TIL  (0) 2025.07.09
2025-07-08 TIL  (0) 2025.07.08