1. 클래스 초기화

1-1. 선언과 동시에 프로퍼티에 기본값 넣어주기

프로퍼티의 선언과 동시에 값을 할당하면 그 값을 초기 값으로 사용할 수 있다.

+) 항상 초기값을 가지면 프로퍼티 선언과 동시에 초기 값을 할당하는게 좋다.

최종 결과는 동일하지만 기본 값은 프로퍼티의 초기화를 해당 선언 시점과 더 밀접하게 연결함으로써 더 짧고 명확한 이니셜라이저를 만들 수 있고, 프로퍼티의 타입을 추론할 수 있기에 코드가 짧아진다.

class SoptMember {
		let name: String = "류희재"
		let part: String = "iOS"
}

1-2. 프로퍼티의 타입을 옵셔널(Optional) 타입으로 설정하기

만약 값이 있을지도 없을지도 모를 경우에는 옵셔널 타입으로 설정하면 된다.

초기화를 할때 var로 선언한 옵셔널 타입의 프로퍼티는 자동으로 nil로 초기화

let으로 선언하고 기본값을 안 주면 에러가 뜸 → 생성자가 불릴 때 nil로 초기화 될텐데, 상수기 때문에 더이상 nil 외에 값을 가질 수 없어서 에러가 나는 것.. 아..닐까..?

class SoptMember {
		var name: String?
		var part: String?
}

class SoptMember { // error: Class 'SoptMember' has no initializers
		let name: String?
		let part: String?
}

1-3. init 함수에서 값을 설정해주기

초기화를 진행 하는 함수를 바로 init 함수(= 생성자)생성자 안에서 해당 프로퍼티들을 초기화 시킬 수 있다

이때, 초기화는 모든 프로퍼티를 초기화 해줘야 한다!

class SoptMember{
		let name: String
		let part: String

		init(name: String, part: String) {
				self.name = name
				self.part = part
		}
}

+) 구조체는 기본값 초기화도 안 하고, init 함수도 안 만들어도 에러 안 나던데 클래스는 에러 나네여?

⇒ 이건 구조체 초기화에서도 언급했듯이, Memberwise Initializers가 없기 때문인데,

그럼 왜 클래스에는 없는걸까?

struct SoptMember {
		var name: String
		var part: String
}

class SoptMember {
		var name: String
		var part: String
}

struct는 상속이 불가능하다 → init이 무조건 필요하다