[Swift] 7. 구조체와 클래스

Hoojeong Kim·2022년 3월 5일
0

Swift Base

목록 보기
9/22
post-thumbnail

구조체

구조체란 타입이 다른 데이터를 용도에 맞게 하나로 묶는 방법이다. 즉, 프로퍼티나 메서드를 저장하고 제공하며, 캡슐화하여 표현하는 타입이다. 이때 구조체는 값 타입이다.

여기서 프로퍼티는 변수나 상수, 메서드는 함수로 생각합시다!

구조체 정의

구조체는 struct키워드를 사용하여 정의한다.

struct 구조체 이름 {
	프로퍼티와 메서드
}

이때 구조체의 이름은 데이터 타입(Int, String...)처럼 파스칼케이스를 따른다. 소문자로 시작하는 프로퍼티나 메서드는 카멜케이스 방식을 따른다.


다음은 고객의 기본 정보를 저장하는 구조체이다.
struct UserInfo {
	var name: String = ""
    var age: Int = 0
    
    func introduce() {
    	print("\(name) \(age)")
    }
}

이처럼 용도에 맞게 여러 프로퍼티나 메서드를 묶을 수 있어 편리하다.

구조체 인스턴스 생성 및 초기화

인스턴스 생성은 다음과 같이 할 수 있다.
프로퍼티를 선언할 때 값을 초기화 했는데, 이니셜라이저를 사용하여 초기화하는 것도 가능하다.(참고)

var userInfo: UserInfo = UserInfo(name: "Hoojeong", age: 23)

var userInfo = UserInfo(name: "Hoojeong", age: 23)

이후, 프로퍼티나 메서드에 접근하고자 한다면 인스턴스 뒤에 마침표(.)를 사용하면 된다.
userInfo.name = "Julia"
userInfo.age = 24

userInfo.introduce()
Julia 24

이때 인스턴스를 let으로 생성했다면, 프로퍼티 값을 변경할 수 없다.


클래스

클래스란 타입이 다른 데이터를 용도에 맞게 하나로 묶는 방법이다. 즉, 프로퍼티나 메서드를 저장하고 제공하며, 캡슐화하여 표현하는 타입이다.
구조체와 완전 동일한 것 같지만, 클래스는 구조체와 달리 참조 타입이다. 구조체와 클래스의 차이에 대한 자세한 내용은 다음 포스팅에서 다루겠다.

클래스 정의

클래스는 class 키워드를 사용해 정의한다.

class 클래스 이름 {
	프로퍼티와 메서드
}

클래스 명도 구조체와 동일하게 앞 글자를 대문자로 작성하는 파스칼케이스를 따른다.


다음은 고양이의 기본 정보를 저장하는 구조체이다.
class Cat {
	var name: String = ""
    var age: Int = 0
    
    func introduce() {
    	print("\(name) \(age)")
    }
}

클래스를 정의하는 방법은 구조체와 흡사하지만, 다른 점이 하나 있다. 클래스는 상속을 받을 수 있기 때문에, 상속을 받는 자식클래스의 이름 뒤에 콜론(:)을 쓰고 부모클래스의 이름을 명시한다.
class 자식클래스 이름: 부모클래스 이름 {
	프로퍼티와 메서드
}

상속에 대한 자세한 개념은 다른 포스팅에서 구체적으로 다루겠다.

클래스 인스턴스 생성 및 초기화

인스턴스 생성은 다음과 같이 할 수 있다.
현재는 프로퍼티를 선언할 때 값을 초기화 했는데, 이니셜라이저를 사용하여 초기화하는 것도 가능하다.(참고)

var cat: Cat = Cat()

var cat = Cat()

이후, 프로퍼티나 메서드에 접근하고자 한다면 구조체와 동일하게 인스턴스 뒤에 마침표(.)를 사용하면 된다.
cat.name = "coco"
cat.age = 1

cat.introduce()
coco 1
profile
나 애기 개발자 👶🏻

0개의 댓글