https://youtu.be/R8OWOgCNt4M?si=bldau6gYEZ3seGj2
위 영상을 보고 정리한 글입니다. (22:20 ~ 27:25)
Swift에서는 데이터를 프로퍼티(Property)라고 하며 멤버 함수는 메소드(Method)라고 한다.
# Swift의 클래스 선언
- 기본 구조
class 새로운 클래스 이름: 부모 클래스 {
// 프로퍼티, 클래스 내에 포함되는 변수(var)와 상수(let)를 정의
// 인스턴스 메서드, 객체가 호출하는 메서드를 정의
// 타입 메서드(클래스 메서드)
}
# 클래스에 property 저장하기
- 프로퍼티는 초기값이 있거나 init을 이용해서 초기화하거나 옵셔널 변수(상수)로 선언
- property는 저장 프로퍼티(stored property)와 계산 프로퍼티(calculated)
class Man{
var age : Int
var weight : Double
}
- age, weight는 stored property
//1. 프로퍼티는 초기값이 있거나
class Man{
var age : Int = 1
var weight : Double = 3.5
}
//2. 옵셔널 변수(상수)로 선언
class Man{
var age : Int?
var weight : Double!
}
- 옵셔널 변수는 자동으로 nil값으로 초기화 됨
# 메서드 정의
- 인스턴스(instance) 메서드, 클래스 또는 타입(class or type)메서드
- 인스턴스 메서드는 인스턴스에서 동작
class Man{
var age : Int = 1
var Weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
}
# 인스턴스 만들고 메서드와 프로퍼티 접근
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
}
var kim : Man = Man() // var kim = Man()
// var kim : Man // 오류, variale 'kim' used before being initialized
kim.display() // 인스턴스.프로퍼티
print(kim.age) // 인스턴스.인스턴스메서드
- 출력값
나이=1, 몸무게=3.5
1
# 클래스(class or type) 메서드
- 클래스.클래스메서드
- 타입 메서드 또는 클래스 메서드는 클래스 레벨에서 동작하는 것으로, 클래스의 새로운 인스턴스를 생성하는 것과 같은 동작
- 타입 메서드는 인스턴스 메서드와 동일한 방법으로 선언하지만 class나 static 키워드를 앞에 붙여 선언
- class 키워드로 만든 클래스 메서드는 자식 클래스에서 override 가능함
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
class func cM(){
print("cM은 클래스 메서드")
}
static func scM(){
print("scM은 클래스 메서드(static)")
}
}
var kim : Man = Man()
kim.display()
Man.cM()
Man.scM()
- 출력값
나이=1, 몸무게=3.5
cM은 클래스 메서드
scM은 클래스 메서드(static)
# 인스턴스 초기화하기 : init()
- 클래스, 구조체, 열거혐(enum) 인스턴스가 생성되는 시점에서 해야 할 초기화 작업
- 인스턴스가 만들어지면서 자동 호출됨
- init 메서드(생성자)
init() {
}
init() {
}
- designated initializer
모든 프로퍼티(age, weight)를 다 초기화시키는 생성자 - 소멸자 : 인스턴스가 사라질 때 자동 호출
denit{}
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(yourAge: Int, yourWeight : Double){
age = yourAge
weight = yourWeight
} // designated initializer
}
// var kim : Man = Man() // 오류
var kim : Man = Man(yourAge:10, yourWeight:20.5)
kim.display()
- 출력값
나이=10, 몸무게=20.5
# self
- 현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self. 을 붙임
- 아래 소스에서는 self를 붙여도 되고 생략해도 됨
class Man{
var age : Int = 1
var weight : Double = 3.5
init(yourAge: Int, yourWeight : Double){
age = yourAge //self.age = yourAge
weight = yourWeight
}
}
- 아래 소스에서는 매개변수와 구분하기 위해 반드시 self를 써야함
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){
self.age = yourAge
self.weight = yourWeight
}
}
var kim : Man = Man(age:10, weight:20.5)
kim.display()
# stored property와 calculated property
- calculated property는 property가 설정되거나 검색되는 시점에서 계산 또는 파생된 값
- 계산 프로퍼터는 게터(getter) 메서드와 계산을 수행하기 위한 코드를 포함하고 있는 세터(setter) 메서드를 생성하여 구현
class Man{
var age : Int = 1
var weight : Double = 3.5
var manAge : Int{ // 메서드 같지만 저장 프로퍼티임
get{
return age-1
}
}
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){
self.age = age
self.weight = weight
}
}
var kim : Man = Man(age:10, weight:20.5)
kim.display()
print(kim.manAge)
- manAge는 계산 프로퍼티로 저장 프로퍼티 age의 값에서 1을 뺀 값으로 하겠다.
- 출력값
나이=10, 몸무게=20.5
9
# calculated property의 getter
class Man{
var age : Int = 1
var weight : Double = 3.5
var manAge : Int{ // 메서드 같지만 계산 프로퍼티임
// get{
return age-1
// }
}
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){
self.age = age
self.weight = weight
}
}
var kim : Man = Man(age:10, weight:20.5)
kim.display()
print(kim.manAge)
- 출력값
나이=10, 몸무게=20.5 - manAge는 계산 프로퍼티로 저장 프로퍼티 age의 값에서 1을 뺀 값
- setter가 없으면 get{ }는 생략할 수 있으며 변경하지 않더라도 var로 선언해야 함
# calculated property의 setter
class Man{
var age : Int = 1
var weight : Double = 3.5
var manAge : Int{ // 메서드 같지만 계산 프로퍼티임
get{
return age-1
}
set(USAAge){
age = USAAge + 1
}
}
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){
self.age = age
self.weight = weight
}
}
var kim : Man = Man(age:10, weight:20.5)
kim.display()
print(kim.manAge) //9, getter 호출
print(kim.age) //10
kim.manAge = 3 //setter 호출
print(kim.age) //4
- 출력값
나이=10, 몸무게=20.510
4
9 - setter가 있으면 get{ }는 생략 불가
- 매개변수명은 newValue가 기본
set(newValue){
age = newValue + 1
} - Shorthand Setter Declaration
setter의 매개변수명이 newValue인 경우에만 이렇게 "(newValue)" 생략 가능
set{
age = newValue + 1
}
# calculated property의 getter와 setter
class Man{
var age : Int = 1
var weight : Double = 3.5
var manAge : Int{
get{ return age-1 }
set{ age = newValue + 1 }
}
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){
self.age = age
self.weight = weight
}
}
var kim : Man = Man(age:10, weight:20.5)
kim.display()
print(kim.manAge) //9, getter 호출
print(kim.age) //10
kim.manAge = 3 //setter 호출
print(kim.age) //4
- 출력값
나이=10, 몸무게=20.510
4
9 - getter와 setter를 갖는 calculated protperty manAge
# method overloading : 생성자 중첩
- 매개변수의 개수와 자료형이 다르지만 이름이 같은 함수를 여려개 정의
- 매개변수가 다른 두생성자를 통해 두 가지 방법으로 인스턴스를 만들 수 있음
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){ // #1
self.age = age
self.weight = weight
}
init(age: Int){ // #2
self.age = age
}
}
var kim : Man = Man(age:10, weight:20.5) // #1
var kim1 : Man = Man(age:10) // #2
kim.display()
kim1.display()
- 출력값
나이=10, 몸무게=20.5
나이=10, 몸무게=3.5
'iOS프로그래밍기초(Smile Han) > 문법 정리' 카테고리의 다른 글
[Swift] 문법 정리 - extension, Swift 접근 제어(access control), 프로토콜(protocol) (0) | 2024.11.17 |
---|---|
[Swift] 문법 정리 - 상속 (3) | 2024.11.10 |
[Swift] 문법 정리 - 함수, 메서드(method) (1) | 2024.10.06 |
[Swift] 문법 정리 - 연산자, 제어문 (2) | 2024.09.21 |
[Swift] 문법 정리 - optional, as, nil, Any, AnyObject (1) | 2024.09.15 |