Swift-Class(클래스)

아토시스·2023년 8월 22일
0

Swift

목록 보기
5/14

Class

  • Swift에서는 객체라는 용어 대신에 인스턴스 라는 용어를 사용한다. 한마디로 클래스 타입의 인스턴스를 객체라고 칭하진 않는다.
  • 단일 상속만 가능하다.
  • (인스턴스/타입) 메서드, (인스턴스/타입) 프로퍼티 (Struct와 같음)
  • 참조타입(=reference type)

클래스는 상속받을 수 있기 때문에 상속을 받을 때는 이름 뒤에 콜론(:)하고 부모클래스 이름을 명시해야한다.

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

1. 클래스 인스턴스의 생성과 초기화

클래스를 정의하고 초기화 할 때는 따로 초깃값을 주지 않고 이니셜라이저를 사용하면 된다.

인스턴스가 생성되고 초기화 즉, 이니셜라이즈된 후에 구조체와 마찬가지로 마침표를 사용하면 되는데, 차이점은 struct는 변수일 때만 가능했지만 , classvar 이건 let 이건 내부 프로퍼티 값을 변경할 수 있다.

class Character {
    var name: String = "포뇨"
    var isfavorite: Bool = false
}

let Mycharacter: Character = Character()
Mycharacter.name = "소피아"
Mycharacter.isfavorite = false

if Mycharacter.isfavorite {
    print("내가 좋아하는 인형은 \(Mycharacter.name) 입니다")
} else {
    print("나는 이 캐릭터를 좋아하지 않는다.")
} // 나는 이 캐릭터를 좋아하지 않는다.



var myCharacter: Character = Character()
myCharacter.name = "캘시퍼"
myCharacter.isfavorite = true

if myCharacter.isfavorite {
    print("내가 좋아하는 인형은 \(myCharacter.name) 입니다")
} else {
    print("나는 이 캐릭터를 좋아하지 않는다.")
} // 내가 좋아하는 인형은 캘시퍼 입니다.

클래스에는 멤버와이즈 이니셜라이저가 함께 제공되지 않는다.(구조체는 제공) 즉 클래스에 프로퍼티가 있는 경우 항상 고유한 이니셜 라이저를 만들어야한다.

예를 들면 이렇게 할 수 있다.


2. 값 타입 / 참조타입

구조체 = 값 타입 / 클래스 = 참조 타입

값 타입과 참조 타입의 가장 큰 차이점은 '무엇이 전달되느냐' 이다.
만약 어떠한 함수의 전달인자로 값 타입으리 값을 넘기면 전달인자 값이 복사되어 전달 될 것이다.
근데, 참조 타입이 전달인자로 전달 될땐 값을 복사하지 않고 참조가 전달 될 뿐 !

아래는 연습한 playground 화면이당 ~

profile
오늘보다 더 나은 내일이 되길 바라며

0개의 댓글