Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

struct와 class와 enum의 차이를 설명하시오. #1

Open
Do-hyun-Kim opened this issue Jul 24, 2023 · 4 comments
Open

struct와 class와 enum의 차이를 설명하시오. #1

Do-hyun-Kim opened this issue Jul 24, 2023 · 4 comments
Labels
Swift Swift CS 개념 공부

Comments

@Do-hyun-Kim
Copy link
Contributor

No description provided.

@Do-hyun-Kim
Copy link
Contributor Author

Do-hyun-Kim commented Jul 25, 2023

Struct

  • 구조체는 값 타입이며 새로 할당 될때마다 서로 독립적인 개체를 띄고 있다.
  • 구조체는 상속이 불가능 하다.

Class

  • 클래스는 참조 타입이며 변수나, 상수, 함수에 전달 될때 값이 복사 되지 않는다.
  • ARC를 통해 메모리를 관리 한다.
  • 상속이 가능하다.
  • 타입 캐스팅을 통해 인스턴스의 타입을 확인 할 수 있다.
  • deinit를 통해 클래스 인스턴스의 메모리를 해체 할 수 있다.

Enum

  • 열거형은 값 타입이다.
  • 열겨형은 상속이 불가능 하다.

Struct, Class, Enum 차이점

Stuct, Class, Enum은 유사한 기능을 제공하지만 가장 큰 차이점은 값 타입과 참조 타입 이라는 Semantics 가 큰 차이점이라 생각합니다.
값 타입 같은 경우 참조 타입과 다르게 Stack 영역에 저장이 되며 속도 측면 이 월등히 빠르며 서로 독립적인 개체를 띄고 있습니다. 반면에 참조 타입 같은 경우 Heap 영역에 저장되며 구조체 보다 더 복잡한 구조를 가지고 있으며, Heap allocation을 사용하여 구조체 보다 더 많은 비용이 필요 합니다.

📝 참고 사이트

@Do-hyun-Kim Do-hyun-Kim added the Swift Swift CS 개념 공부 label Jul 25, 2023
@ronick-grammer
Copy link
Contributor

struct

  • 값 타입
  • 상속 지원 X
  • 스택(Stack)에 할당

class

  • 참조 타입
  • 상속 지원 O
  • 힙(Heap)에 할당
  • ARC로 부터 관리받음

enum

  • 값 타입
  • 상속 지원 X
  • 스택(Stack)에 할당

struct, class, enum 의 차이점

값(value) 타입인 struct와 enum은 원본 인스턴스를 복사하거나 메서드에 인자로 전달할 경우 인스턴스 값을 가진 새로운 복사본 인스턴스가 Stack에 할당된다. 따라서 어떤 하나의 인스턴스의 값을 변경해도 다른 복사본들에게는 영향을 미치지 않는다.

반면, 참조(refrence) 타입인 class는 원본 인스턴스를 대입하거나 메서드에 인자로 전달할 경우 원본 인스턴스가 할당된 Heap 메모리 위치(주소)에 대한 참조체가 전달된다.

결론적으로, 값 타입은 그 모든 데이터들이 Stack 메모리 구조상 위에 바로 할당되고(push), 해제시에 가장 위의 데이터가 메모리에서 해제(pop)되는 후입선출 구조이기에 매우 빠르다. 참조 타입은 그 데이터들이 Heap 메모리에 할당되는데 이 과정에서 Heap에 할당할 만한 크기의 메모리 공간을 계산하고 할당해야하며, 할당한 이후에는 이 할당된 Heap 메모리상 주소에 대한 정보를 Stack에 또 할당해야 한다. 그리고 이 참조 타입 데이터를 사용할 때 Stack 메모리에 할당된 Heap 메모리상 주소 데이터를 찾아 이 Heap 메모리상 주소에 할당된 나머지 데이터를 찾아야하므로 비용이 값타입보다 크다.

class 보다 struct를 사용하는게 좋은 경우

  • 연관된 간단한 값들을 캡슐화하는 것이 목적일 경우

  • 값을 참조하는게 아닌 복사하는 것이 합당할 경우

  • 다른 타입으로부터 상속을 받거나, 자신을 상속할 필요가 없는 경우

  • Objective-C 를 사용하는 컴포넌트 관련 작업을 해야하는 것이 아닌 경우

📝 참고 사이트

@vichye-1
Copy link

vichye-1 commented Jul 26, 2023

class, struct, enum 비교 표

class,struct,enum table

class, struct, enum 의 차이점

class는 참조타입, struct와 enum은 값 타입인 것이 가장 큰 특징이다.

class는 stack에 값의 주소를 저장하고, heap에 참조되는 값을 저장한다.

반면, struct 에서는 값이 stack 영역에 저장되기에 속도가 빠르다.

다른 객체 또는 함수 등으로 전달될 때 참조가 아니라 복사(값 복사) 할 경우, 자신을 상속할 필요가 없거나, 다른 타입을 상속 받을 필요가 없는 경우 값 타입을 사용한다.

또한, class는 상속이 가능하지만, struct와 enum은 상속이 불가능하다.

📝 참고 사이트

@Hminchae
Copy link
Member

Hminchae commented Aug 3, 2023

Struct와 Class, enum

모두 프로퍼티를 정의하고, 값을 저장하며, 메서드를 정의할 수 있는 객체 생성 메커니즘을 제공하지만, 구조체의 인스턴스와 클래스의 인스턴스가 복사되거나 메서드 또는 함수에 인자가 전달될 때 발생하는 동작에 차이가 있음

Struct

클래스보다 효율적이고 멀티 스레드 코드를 사용하는 데 더 안정적임

  • 인스턴스의 타입 : 값 타입(value type)
  • 상속 불가
  • 스택(Stack)에 할당
  • 소멸자 메서드(denit)를 포함할 수 없음

Class

상속이 필요하거나 데이터가 캡슐화된 하나의 인스턴스가 필요할 때는 클래스를 사용해야 한다. 또한 인스턴스가 소멸될 때 리소스를 확보하기 위한 작업이 필요할 때도 클래스를 사용해야한다.

  • 인스턴스의 타입 : 참조 타입(reference type)
  • 상속 가능
  • 힙(Heap)에 할당
  • 소멸자 메서드(denit)를 포함할 수 있음

enum

연관된 값의 집합을 정의한다.

  • 인스턴스의 타입 : 값 타입(value type)
  • 스택(Stack)에 할당
  • 상속 불가

📝참조

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Swift Swift CS 개념 공부
Projects
None yet
Development

No branches or pull requests

4 participants