Q. 구조체와 클래스 비교

→ 내가 사용하는 자바 기준 구조체는 따로 없지만 두 가지를 모두 갖고 있는 언어에서는 차이점이 두드러진다.

✅ C++ 기준

항목 클래스 (class) 구조체 (struct)
기본 접근 제어자 private public
상속 가능 여부 가능 가능
멤버 함수 가질 수 있음 가질 수 있음
캡슐화 가능 가능
사용 목적 주로 객체 지향 설계에 사용 주로 간단한 데이터 묶음 (Plain data)

✅ C# 기준

항목 클래스 (class) 구조체 (struct)
값/참조 타입 참조 타입 (Reference Type) 값 타입 (Value Type)
상속 가능 (다형성 지원) 불가능 (인터페이스만 구현 가능)
기본 생성자 사용자 정의 가능 사용자 정의 기본 생성자 없음 (파라미터 없는 생성자 금지)
GC 영향 힙에 할당, GC 대상 스택에 주로 할당, GC 부담 적음

✅ Swift 기준

항목 클래스 (class) 구조체 (struct)
값/참조 타입 참조 타입 값 타입
상속 가능 불가능
ARC 적용 적용됨 적용되지 않음
사용 패턴 복잡한 객체 모델링에 적합 간단하고 변하지 않는 데이터 표현에 적합

Q. 단일연결리스트에서 중간 노드를 삭제하는 방법

→ 단일연결리스트에 대해서 검색하다가 트릭으로 알아낸 방법이다.

current 노트를 직접 지우지 X → 다음 노드의 값을 복사하고, 다음 노드를 건너뛰는 방식

(연결 리스트의 head도 없고 prev도 없는 상황에서 노드 삭제 할 때 쓰기 좋다)

A -> B -> C -> D

current = c 이고 B를 모르는 상황!

  1. C.data = D.data ← 값 복사
  2. C.next = D.next ← 연결 건너뜀
  3. 원래 D는 리스트에서 사라짐