[Kotlin/코틀린] 6. 생성자(Constructor), 객체(Object)

2023. 12. 11. 01:41스파르타/Kotlin

3주차 '객체 지향 프로그래밍의 기초' 강의 내용 정리

 

 

6-1. 생성자 (Constructor)

클래스를 초기화하고 객체를 생성하는데 사용되는 특별한 함수이다.

생성자는 기본 생성자와 명시적 생성자가 존재한다.

 

 

기본 생성자 : 이전까지 클래스를 만들던 행위와 차이가 없다.

명시적 생성자 : 주 생성자와 부 생성자로 구분할 수 있다.

 

 

 

Init (주 생성자) 사용 예시

fun main() {

}

// 클래스 선언부에 생성자를 명시함
class Character(_name:String, _hairColor:String, _height:Double) {
    var name:String = ""
    var hairColor:String = ""
    var height:Double = 0.0

    // 매개변수를 직접 넘기지않음
    init {
        println("매개변수없는 생성자 실행 완료!")
    }

    fun fireBall() {
        println("파이어볼!")
    }
    fun compositing(device1:String, device2:String): String {
        var device3 = device1 + device2
        println("새로운 무기인 ${device3}입니다")
        return device3
    }
}

 

정보 *프로퍼티와 행위 메소드 사이에 Init 이 들어있다.

이것을 생성자라고 한다.

클래스를 실체화 하기 위해서 반드시 외부로부터 정보를 Charactor 파라미터로 넘겨준다.

실체화 될 때 최초로 실행할 코드는 Init 에 있다.

 

* 여기서 말하는 프로퍼티란 클래스의 속성을 나타내는 변수들을 말한다.

클래스 내부에서 정의된 프로퍼티들은 주로 객체의 상태를 말한다.

 

 

 

 

Constructor (부 생성자)의 사용 예시

class Character {
    var name:String = ""
    var hairColor:String = ""
    var height:Double = 0.0

    // 명시적 생성자 (Constructor)
    // _name, _hairColor, _height와 같이 생성자에 변수를 넘기는 경우에 사용함
    constructor(_name:String, _hairColor:String, _height:Double) {
        println("${_name}을 생성자로 넘겼어요")
        println("${_hairColor}를 생성자로 넘겼어요")
        println("${_height}를 생성자로 넘겼어요")
    }

    fun fireBall() {
        println("파이어볼!")
    }
    fun compositing(device1:String, device2:String): String {
        var device3 = device1 + device2
        println("새로운 무기인 ${device3}입니다")
        return device3
    }
}

 

constructor 라는 키워드 안에 최초로 출력해주는 로직을 넣었다.

 

 

 

 

 

Init 과 Constructor의 차이점

Init 은 클래스의 옆에 들어있고,

Constructor 는 클래스 안에 들어있다.

 

 

그렇다면 왜 주 생성자와 부 생성자를 나누었을까?

 

주 생성자는 매개변수를 직접적으로 넘겨서 사용하는 것이 아니라

클래스에 반드시 하나의 형태로만 사용한다.

즉, 한 가지의 형태로 클래스를 실체화할 때는 주 생성자를 활용할 수 있다.

 

부 생성자의 경우 여러 개의 생성자를 만들고

원하는 생성자를 선택해서 최초 로직을 수행할 수 있다.

 

 

 

 

 

 

 

6-2. 객체 (Object)

모든 인스턴스를 포함하는 개념이다.

클래스 타입으로 선언된 것들을 객체(Object) 라고 한다.

 

 

 

인스턴스 (Instance)

클래스형태로 설계된 객체를 실체화 하면 인스턴스가 생긴다.

인스턴스는 메모리 공간을 차지한다.

 

 

클래스를 실체화한다.

정보와 행위를 작성한 클래스를 실제 사용 가능한 프로그램에 로딩한다. (메모리에 적재)

정보가 행위가 그대로 로딩되는 것이 아니라 위치정보를 메모리에 로딩한다.

프로그램은 객체의 위치정보를 변수에 저장해두고, 필요할 때 참조한다.