[iOS / Swift] 구조체 (Struct)

2024. 10. 15. 20:13
반응형

구조체 (Struct)

: 구조체란 인스턴스의 값(프로퍼티)을 저장하거나 기능(메서드)을 제공하고 이를 캡슐화할 수 있는 Swift가 제공하는 타입(named type)임. 클래스처럼 인스턴스를 만들어서 실제 작업에도 쓸 수 있음.

코드를 보면 클래스와 구조체의 코드가 거의 비슷함. class를 struct로 바꾼 것 말고는 차이가 없는듯함.

이처럼 클래스와 구조체는 선언하고 사용하는 방법까지 매우 비슷함. 구조체 안의 변수도 속성이라 부르고 함수도 메서드라고 부름.

구조체 안의 변수 : 속성(Property)
구조체 안의 함수 : 메서드(method)

 

이제 클래스와 조금 다른 점을 보자면, 클래스에서는 초기화 작업이 있었음. 초기화 작업을 하면 인스턴스에 매개변수를 변경해줄 수 있었음.

(클래스 내부에 init() 메서드 생성). 하지만 구조체에서는 자동으로 초기화 코드를 만들어줌.

코드를 다음과 같이 name속성의 값을 선언하지 않고 인스턴스 선언시 매개변수로 넣어줬음. 클래스의 경우 init() 메서드가 필요하지만,

구조체에서는 이렇게 코드만 작성해도 문제가 없음.


구조체 초기화 (Initialization)

클래스와 달리 구조체는 구조체 멤버를 파라미터 네임으로하여 Swift가 자동으로 초기화코드를 만들어줌. 물론 직접 작성할 수도 있음.

하지만 초기화 코드를 직접 정의하면 자동 초기화 코드는 제공받지 못함.

 

코드를 보면 init() 초기화 함수를 이용하여 클래스와 동일한 방법으로 초기화를 해주었음. 하지만 변수 name과 age를 보면 코드상으론 매개변수를 name밖에 선언을 해주지 않았음.( init(name: String) )그리고 따로 age에는 26이라는 정수형을 넣었음.

하지만 인스턴스를 생성할 떄 name의 매개변수밖에 정하지 못하게 되어있음. 

 

즉, 자동 초기화에서는 정의할 수 있는 age변수를 직접 초기화를 쓴 여기서는 정의할 수 없다는 것임. 이것으로 초기화를 직접 정의하면 자동 초기화 코드는 제공받지 못한다를 알 수 있었음.


구조체 상속

클래스와 달리 구조체에는 상속을 할 수 없음. 

 

상속을 할 수 없으니 클래스를 쓰는게 낫지않을까? 라는 생각도 했지만, 클래스와 구조체는 비슷하지만 다른 부분도 분명 존재하기 때문에 언제 무엇을 사용해야할지를 잘 생각하면서 사용해야함.

구조체(Struct).playground.zip
0.01MB

반응형

BELATED ARTICLES

more