[ 구조체와 클래스 ]

2022. 12. 2. 04:19Mobile/Swift

메소드와 프로퍼티

struct Resolution {
    var width = 0 
    var height = 0
    
    func desc() -> String {
    	return "Return 구조체"
    }
}

class VideoMode {
    var interlaced = false
    var frameRate = 0.0
    var name: String 
    
    func desc() -> String {
    	return "VideoMode 클래스"
    }
}

Resolution 구조체


픽셀 기반 디스플레이의 해상도 정보를 관리하기 위한 목적, width 랑 height 라는 두 개의 저장 프로퍼티가 있음. 

 

저장 프로퍼티: 특정 값을 저장하기 위해 클래스나 구조체의 내부에 정의된 변수나 상수

두 프로퍼티는 초기값이 0 대입 -> 타입 추론 규칙에 의해 Int 데이터 타입 형식으로 추론됨.


VideoMode 클래스

비디오 디스플레이에서 표현되는 비디오에 대한 정보를 관리하기 위한 목적이라고 생각하면 됨.

세 개의 저장 프로퍼티 정의 

  • interlaced : Bool 타입
  • framerate: 0.0 이 초기값인 Double 타입
  • name: 옵셔널 문자열로 정의, name 프로퍼티는 초기값 할당되지 않았는데, 옵셔널 타입 프로퍼티에 초기값이 할당되지 않으면 자동으로 nil 이라는 기본값으로 초기화됨 
    • 이 때 name 프로퍼티에 값이 존재하지 않음 으로 해석

인스턴스

구조체나 클래스는 실행할 수 있는 객체가 아니라, 값을 담을 수 있는 실질적인 그릇을 만들어내기 위한 일종의 틀, 원형(Origin) 

-> 여기에 값을 담을 수 있는 것이 아니라 이 원형을 바탕으로 실제로 값을 담을 그릇을 찍어내야만 값을 담을 수 있다.

틀 역할을 하는 클래스나 구조체를 정의하고 이를 바탕으로 실질적으로 값을 담을 여러 개의 그릇을 만들어내는 것, 이것이 객체지향 프로그래밍의 원리이다.
이 때 원형 틀을 이용하여 찍어낸 그릇을 인스턴스(Instance) 라고 한다. 

-> 타입 설계도를 사용해 메모리 공간을 할당받은 것이 인스턴스이다. 

 

구조체와 클래스의 인스턴스를 생성하는 방식은 거의 같음.

// Resolution 구조체에 대한 인스턴스를 생성하고 상수 InsRes에 할당
let insRes = Resolution()

// VideoMode  클래스에 대한 인스턴스를 생성하고 상수 insVMode 에 할당
let insMode = VideoMode()

함수: () 괄호의 의미는, 함수 호출 연산자

클래스, 구조체: () 괄호 의미, 클래스나 구조체를 초기화하여 인스턴스를 생성하는 역할을 함( 인스턴스 생성 연산자 )

 

프로퍼티에 접근하려면 반드시 인스턴스에 먼저 접근해야 함.

방법: 점 문법(Dot Syntax) 을 이용해 인스턴스의 하위 객체에 접근할 수 있음. 점(.)을 이용하여 프로퍼티에 접근할 때는 인스턴스 이름 바로 다음에 점으로 구분하여 프로퍼티의 이름을 작성한다.

<인스턴스 이름>.<프로퍼티 이름>

let width = insRes.width
print("insRes 인스턴스의 width 값은 \(width)입니다.")