Search

Class 와 Struct의 차이점(박호건)

클래스와 구조체의 공통점

여러 변수(속성)와 함수(메소드)를 담을 수 있는 하나의 집합
데이터를 용도에 맞게 묶어서 사용할 때 편리하고 가독성을 높여줌
초기화를 정의해 여러 매개변수에 대한 다양한 인스턴스를 생성 가능
기본적인 구현을 넘어선 기능을 확장시킬 수 있도록 확장이 가능
점(.)을 이용해 인스턴스의 속성과 메소드에 접근할 수 O.
인스턴스 생성이 가능하고 생성 방법이 같다
특정 종류의 표준 기능을 제공하는 프로토콜을 사용 가능
샤로운 데이터 타입을 만들어 주는 것

클래스와 구조체의 차이점

구조체에는 init()메소드 없이 자동으로 초기화 함수를 만들어 줌.
클래스에서는 상속이 가능하지만 구조체는 불가능
구조체는 값 타입이지만, 클래스는 참조 타입
타입 캐스팅은 클래스의 인스턴스에만 허용
디이니셜라이저는 클래스의 인스턴스에만 활용 가능
참조 횟수 계산(Reference Counting)은 클래스의 인스턴스에만 적용

값 타입과 참조 타입(Reference Types)

갑 타입은 상수나 변수에 할당하거나 함수에 넘겨질 때 복사가 된다. 값 타입과 다르게 참조 타입은 변수나 상수에 할당하거나 함수에 넘길 때 복사하지 않는다. 복사 대신에 기존의 같은 인스턴스에 참조가 사용된다. 즉 값이 복사되는 것이 아니라 메모리를 참조하는 것이다.
구조체는 값 타입 클래스는 참조 타입
Plain Text
복사
코드를 짜서 확인을 해보면
구조체의 결과는 그대로 10이 나왔고 클래스에서는 바뀐 30이 나왔다.
여기서 알 수 있는 사실은 구조체는 복사하는 값 타입 클래스는 참조하는 참조타입이다.

클래스 인스턴스 둘 중 어떤걸 쓸까?

구조체는 인스턴스는 값을 항상 넘기며, 클래스 인스턴스는 항상 참조를 넘겨준다. 이 의미는 서로 다른 작업의 종류에 적합하다는 의미다. 프로젝트에 필요한 데이터 구조와 기능을 고려해 각각의 데이터는 클래스나 구조체로 정의하도록 구성해야 한다
애플에서는 다음 조건 중 하나 이상에 해당하면 구조체를 사용하는 것을 권장한다
1.
구조체의 최우선 목표는 몇몇 단순 데이터 값을 캡슐화 하는 경우
2.
캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
3.
구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
4.
다른 기존 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때