클래스, 구조체 비교

임주희·2022년 9월 13일
1

클래스

  • 참조 타입
  • 이름 있는 타입
  • 생성자 필수 선언
  • 상속 받을 수 있음 (참조 타입만 상속 받을 수 있음)
class User {
	var nickname: String
	var age: Int

// 생성자 정의
init(name: String, age: Int){
	// 프로퍼티 값 초기화
	self.nickname = name
    self.age = age
}

// 인스턴스 생성
var user: User = User(name: "juh2", age: 29)
print(user.nickname) // "juh2"

구조체

  • 값 타입
  • 이름 있는 타입
  • 생성자 선언 안해줘도 됨. → 기본 생성자
  • 상속 받을 수 없음
// 구조체 선언
struct User {
	var nickname: String
	var age: Int
    
    // 생성자 생략 가능
}

// 인스턴스 생성
var user: User = User(nickname: "juh2", age: 29) // ←기본생성자
print(user.nickname) // "juh2"

*애플은 참조타입 보다 구조체와 같은 값 타입을 선호할 것을 권고한다.


참조 타입 : 인스턴스를 전달하는 경우 원본 인스턴스의 참조를 전달하게 된다.
이는 원본을 변경하는 경우, 복사본도 변경이 되며 반대로 복사본을 변경하더라도 원본도 변경이 된다.

값 타입 : 인스턴스를 전달하는 경우 원본의 복사본을 전달한다.
이는 한 인스턴스가 변경되더라도 다른 인스턴스에는 영향을 끼치지 않는다.
원본을 변경하던 복사본을 변경하던 서로에게 영향을 끼치지 않는다.

0개의 댓글

관련 채용 정보