Struct 가 무엇이고 어떻게 사용하는지 설명하시오.
Swift iOSInterviewquestions
값 타입의 자료형을 만들 때 사용하는 청사진. 클래스의 값 타입형이라고 볼 수 있다.
- call by value
- 클래스와 비슷하게 사용할 수 있다. 내부에 변수, 상수, 메소드, 열거형을 선언할 수 있다.
- 내부 메소드에서 프로퍼티를 수정하려면
mutating
키워드를 붙여야 한다. - 구조체의 인스턴스를 전달하면 값이 복사가 된다. (클래스는 해당 인스턴스의 참조를 가리키는…?)
struct 구조체_이름 {
프로퍼티와 메서드들
}
- 구조체는 이니셜라이저를 직접 만들지 않아도 기본으로 생성된다. (멤버와이즈 이니셜라이저, 모든 프로퍼티를 지정하는 이니셜라이저가 생성됨)
- 구조체는 상속을 할 수 없음
- 타입캐스팅은 클래스의 인스턴스에만 허용
- 디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있음
- 참조 횟수 계산(Reference Counting)은 클래스의 인스턴스에만 적용
다음 조건 중 하나 이상 해당하면 구조체를 사용할 것
- 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
- 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
- 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
- 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때
생각해보기
구조체로 만든 인스턴스는 객체라고 할 수 있을까요?
클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미
객체지향 프로그래밍에서 객체는 클래스의 인스턴스
구조체로 만든 인스턴스는 참조가 되는가? 라는 의문이 들었음. 값은 스택에 할당되는데(물론 스택도 메모리의 일부지만) … 클래스의 객체는 힙에서 가리키니까(?)
스위프트에서는 모르겠지만, C++에서는 구조체의 인스턴스도 객체라고 하는 거 같다.