Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

클래스 (class) - 1 본문

Class/Swift

클래스 (class) - 1

김브래 2023. 1. 13. 19:04

클래스 vs. 객체 vs. 인스턴스


객체지향 용어 비교


객체 인스턴스

인스턴스(instance)

실제로 메모리에 할당된 객체(object)
소프트웨어 애플리케이션을 개발하는 데 사용되는, 쉽게 사용할 수 있으며 재사용할 수 있는 기능을 가진 모듈
 
객체의 구성
- 데이터 변수(data variable) or 속성(property)
- 함수 or 메서드(method)

클래스란?

청사진이나 설계도가 건물이 완성된 후의 모습을 나타내고 있는 것처럼 클래스(class)는 객체가 생성되었을 때 어떠한 모습을 보일 것인지를 정의
- int x;
- Student han;  //C++
- 클래스 인스턴스;

Swift 클래스 선언하기

클래스의 기본 구조는 다음과 같다.

class 새로운 클래스 이름 : 부모 클래스 {

  // 프로퍼티

  // 인스턴스 메서드

  // 타입(type) 메서드(클래스 메서드)

}

프로퍼티” 부분은 클래스 내에 포함되는 변수(var)상수(let)를 정의한다.
인스턴스 메서드”는 객체가 호출하는 메서드를 정의한다.
타입 메서드”는 클래스가 호출하는 메서드를 정의한다.

클래스에 저장 프로퍼티(stored property) 추가하기

프로퍼티는
- 초기값이 있거나 init을 이용해서 초기화하거나 옵셔널 변수(상수)로 선언(자동으로 nil로 초기화) 한다.
 
property는 저장 프로퍼티(stored property) 계산 프로퍼티(computed property) 가 있다.

 

class Man{

  var age : Int

  var weight : Double //  age, weight는 stored property

}  //오류 - 초기값 없음


프로퍼티는 초기값이 있거나 옵셔널 변수(상수)로 선언

class Man{

  var age : Int = 1 //stored property는 초기값이 있어야 함

  var weight : Double = 3.5

}

 

class Man{

  var age : Int? //stored property는 초기값이 있어야 함, nil

  var weight : Double!

}


메서드 정의

인스턴스(instance) 메서드, 클래스 또는 타입(class or type)메서드
인스턴스 메서드는 인스턴스에서 동작

 

class Man{

  var age : Int = 1

  var weight : Double = 3.5

  func display(){ //인스턴스 메서드

   print("나이=\(age), 몸무게=\(weight)")

  }

}


인스턴스 만들고 메서드와 프로퍼티 접근

var x : Int
var kim : Man 
- 오류, variable 'kim' used before being initialized
 
var age: Int = 0  
var 변수명: 자료형 = 초기값

 

var 인스턴스명 : 클래스명 = 클래스명()
var 인스턴스명 = 클래스명()
- 클래스명 다음의 괄호는 눈에 보이지 않는 default initializer를 나타냄

 

var Kim : Man = Man()  //:Man은 생략 가능
var Kim = Man()
 
인스턴스.프로퍼티
- kim.age

 

인스턴스.인스턴스메서드
- kim.display()

 

class Man{

  var age : Int = 1

  var weight : Double = 3.5

  func display(){

   print("나이=\(age), 몸무게=\(weight)")

  }

}

var kim : Man = Man()

kim.display() //인스턴스 메서드는 인스턴스가 호출

print(kim.age)


클래스(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() //클래스 메서드는 클래스가 호출


인스턴스 초기화하기 : init()

클래스, 구조체, 열거형(enum) 인스턴스가 생성되는 시점에서 해야 할 초기화 작업

 

인스턴스가 만들어지면서 자동 호출

 

init 메서드(생성자)


init() { 
}


designated initializer
- 모든 프로퍼티(age, weight)를 다 초기화시키는 생성자

 

init()을 하나라도 직접 만들면 기본적으로 만들어지는 눈에 안보이는 default initializer는 사라짐


소멸자
- 인스턴스가 사라질 때 자동 호출
- deinit{} 

 

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() //오류
//init()을 하나라도 직접 만들면 default initializer는 사라짐
var kim : Man = Man(yourAge:10, yourWeight:20.5) 
kim.display()


인스턴스 만들 때 클래스명 다음 괄호의 의미: init() 호출

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() //init()호출 : 오류
var kim : Man = Man(yourAge:10, yourWeight:20.5)
//init(yourAge: Int, yourWeight : Double)호출
kim.display()


self

현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.을 붙임

 

아래 소스에서는 매개변수와 구분하기 위해 반드시 self.을 써야함

 

class Man{
  var age : Int = 1
  var weight : Double = 3.5
  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()