클래스(Class) ,구조체(Struct) 2

임혜정·2024년 6월 10일
0
AspectStructClass
TypeValue TypeReference Type
Memory AllocationStackHeap
Copy BehaviorCopyShare
InheritanceDoes Not Support InheritanceSupports Inheritance
PerformanceFastSlow

클래스와 구조체의 차이점

  1. Struct는 값 타입(Value Type) / Class는 참조 타입(Reference Type)
  • 구조체는 값을 복사하여 전달한다 / 클래스는 메모리의 동일한 인스턴스를 공유
  • 변수에 구조체를 할당하면, 새로운 인스턴스가 생성 / 변수에 클래스를 할당하면, 원래 인스턴스에 대한 참조를 전달
  • 함수나 메서드에 구조체를 전달하면, 값이 복사되어 전달됨 / 함수나 메서드에 클래스를 전달하면, 참조가 전달되어 원래 인스턴스가 변경됨
  1. 메모리 관리
  • Struct는 스택(Stack)에 저장 / Class는 힙(Heap)에 저장된다.
  • 함수 호출이 끝나면, 구조체가 자동으로 해제된다. / 클래스 인스턴스는 명시적으로 해제되기 전까지 메모리에 남아 있다.
  1. 상속
  • Struct는 상속을 지원하지 않는다. / Class는 상속을 지원한다.
  • 구조체는 상속을 통해 기능을 확장할 수 없다. / 클래스는 다른 클래스를 상속받아 기능을 확장할 수 있다.
  • 프로토콜을 통해 구조체의 기능을 확장할 수 있다. / 상속을 통해 코드 재사용성과 다형성을 구현할 수 있다.

무엇을 써야할까?

구조체를 주로 쓴다. 카피>전달 방식이기 때문에 각 객체들이 독립적일 수 있고 데이터 안전성을 보장하고 빠르다.

  1. Struct를 사용하는 경우
  • 값의 불변성을 유지하고 싶을 때
  • 데이터를 복사하여 전달하는 것이 더 적합할 때 사용한다.
  • 예시: 좌표(Point), 크기(Size), 범위(Range) 등
  1. Class를 사용하는 경우
  • 객체의 상태를 공유하고 싶을 때 사용한다.
  • 상속을 통해 기능을 확장하고 싶을 때 사용한다.
  • 예시: 사용자(User), 뷰(View), 네트워크 연결(Connection) 등

네 가지 주요 메모리 영역에 다룰 때

메모리 영역설명Struct 구조체Class 클래스
스택(Stack)함수 호출과 관련된 지역 변수와 매개변수를 저장구조체 인스턴스가 스택에 저장된다.클래스 인스턴스의 참조가 스택에 저장된다.
힙(Heap)동적으로 할당되는 메모리 영역구조체가 힙에 저장된 객체를 참조할 수 있다.클래스 인스턴스가 힙에 저장된다.
데이터(Data)전역 변수와 정적 변수가 저장전역 변수 또는 정적 변수로 선언된 구조체가 이 영역에 저장된다.전역 변수 또는 정적 변수로 선언된 클래스의 참조가 이 영역에 저장된다.
코드(Code)실행할 프로그램 코드가 저장구조체의 메서드가 이 영역에 저장된다.클래스의 메서드가 이 영역에 저장된다.

구조체의 네 가지 메모리 영역에 대한 세부 설명:

  1. 스택(Stack)
  • 함수 호출과 관련된 지역 변수와 매개변수를 저장하는 메모리 영역이다. 구조체는 값 타입이므로 스택에 저장된다.
  • 특징: LIFO(Last In First Out) 구조로 동작한다.
  1. 힙(Heap)
  • 설명: 동적으로 할당되는 메모리 영역이다. 구조체 자체는 힙에 저장되지 않지만, 구조체가 힙에 할당된 객체를 참조할 수 있다.
  • 특징: 메모리 단편화가 발생할 수 있고, 상대적으로 느린 메모리 할당과 해제가 이루어진다.
  1. 데이터(Data) 영역
  • 전역 변수와 정적 변수가 저장되는 메모리 영역이다. 프로그램 시작 시 할당되고 종료 시 해제된다.
  • 특징: 초기화된 데이터(.data)와 초기화되지 않은 데이터(.bss)로 구분된다.
  1. 코드(Code) 영역
  • 설명: 실행할 프로그램 코드가 저장되는 메모리 영역이다.
  • 특징: 읽기 전용이며, 프로그램 실행 중 변경되지 않는다.

클래스의 네 가지 메모리 영역에 대한 세부 설명:

  1. 스택(Stack)
  • 함수 호출 시 지역 변수와 매개 변수가 저장되는 메모리 영역이다. 클래스 인스턴스의 참조(포인터)는 스택에 저장된다.
  • 특징: 함수 호출이 끝나면 메모리가 자동으로 해제된다. LIFO(Last In First Out) 구조로 동작한다.
  1. 힙(Heap)
  • 클래스 인스턴스는 힙에 동적으로 할당된다. 동적 메모리 할당을 지원하는 큰 메모리 영역이다.
  • 특징: 메모리 할당과 해제가 상대적으로 느리며, 여러 참조에 의해 공유될 수 있다. 가비지 컬렉션이나 수동으로 메모리를 관리해야 한다.
  1. 데이터(Data) 영역
  • 초기화된 전역 변수와 정적 변수가 저장되는 메모리 영역이다. 프로그램 시작 시 할당되고 종료 시 해제된다.
  • 특징: 초기화된 데이터(.data)와 초기화되지 않은 데이터(.bss)로 구분된다.
  1. 코드(Code) 영역
  • 실행할 프로그램 코드가 저장되는 메모리 영역이다.
  • 특징: 읽기 전용이며, 프로그램 실행 중 변경되지 않는다.
profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️

0개의 댓글