본문 바로가기
Do it 코틀린 프로그래밍

코틀린 클래스와 객체의 정의

by 차누감 2020. 8. 18.

코틀린은 함수형 프로그래밍과 더불어 객체 지향 프로그래밍 기법을 지원합니다.

 

객제 지향 프로그래밍 기법 개념

  • 추상화 : 특정 클래스를 만들 때 기본 형식을 규정하는 방법
  • 인스턴스 : 클래스로부터 생성한 객체
  • 상속 : 부모 클래스의 내용을 자식 클래스가 그대로 물려받음
  • 다형성 : 하나의 이름으로 다양한 처리를 제공
  • 캡슐화 : 내용을 숨기고 필요한 부분만 사용
  • 메시지 전송 : 객체 간에 주고받는 메세지
  • 연관 : 클래스 간의 관계

객체 지향 프로그래밍의 용어 정리

코틀린에서 사용하는 언어 다른 언어에서 사용하는 언어
클래스(Class) 분류, 범주
프로퍼티(Property) 속성(Attribute), 변수(Variable), 필드(field), 데이터(data)
메서드(Method) 함수(Function), 동작(Operation), 행동(Behavior)
객체(Object) 인스턴스(Intance)

 

클래스 선언하기

class Bird{ }
class Bird // 빈 형태일 경우 중괄호 생략가능
class Bird {
	//프로퍼티
	//메서드
}

 

클래스 사용 예)

class Bird{
    var name:String = "mybird"
    var wing:Int =2
    var beak:String = "short"
    var color:String ="blue"

    fun fly() = println("Fly wing : $wing")
    fun sing(vol:Int) = println("Sing : $vol")
}

fun main(){
    val coco= Bird()    // Bird로부터 만들어진 객체 coco
    coco.color="Red"	// 객체 프로퍼티에 값 할당
    println("coco.color : ${coco.color}")   //  coco.color : Red
    coco.fly()                              //  Fly wing : 2
    coco.sing(3)                       		// 	Sing : 3
}

 

생성자

생성자란 클래스를 통해 객체가 만들어질 때 기본적으로 호출되는 함수를 말합니다.

클래스 안의 프로퍼티 값을 미리 초기화 해둬도 되지만 그러면 항상 같은 값의 프로퍼티를 가진 객체가 만들어질 것입니다. 

 

class 클래스 이름 constructor(매개변수){	//	주 생성자 위치
	constructor(매개변수){	//	부 생성자 위치
    	//	프로퍼티 초기화
    }
    [constructor(매개변수){	}]	//	추가 부 생성자 위치
}

주 생성자 사용 예)

class Bird constructor(_name:String, _wing:Int, _beak:String, _color:String){	//	주 생성자
    var name:String=_name
    var wing:Int=_wing
    var beak:String=_beak
    var color:String=_color

    fun fly() = println("Fly wing : $wing")
    fun sing(vol:Int) = println("Sing : $vol")
}

fun main(){
    val coco= Bird("mybird",2,"short","blue")    // Bird로부터 만들어진 객체 coco
    coco.color="yello"
    println("coco.color : ${coco.color}")   //  coco.color : Red
    coco.fly()                              //  Fly wing : 2
    coco.sing(3)                        // Sing : 3
}

 

프로퍼티를 포함한 주 생성자 예)

class Bird(var name:String, var wing:Int, var beak:String, var color:String){   //  constructor 생략
    // 프로퍼티는 매개변수 안에 var를 사용해 프로퍼티로서 선언되어 본문에서 생략됨
    fun fly() = println("Fly wing : $wing")
    fun sing(vol:Int) = println("Sing : $vol")
}

fun main(){
    val coco= Bird("mybird",2,"short","blue")  
}

 

부 생성자 사용 예 )

class Bird{
    var name:String
    var wing:Int
    var beak:String
    var color:String

    constructor(name:String, wing:Int, beak:String, color:String){	//	부 생성자
        this.name=name
        this.wing=wing
        this.beak=beak
        this.color=color
    }
}

fun main(){
    val coco= Bird("mybird",2,"short","blue")    // Bird로부터 만들어진 객체 coco
}

 

부 생성자 여러 개 사용 예)

class Bird{
    var name:String
    var wing:Int
    var beak:String
    var color:String

    constructor(name:String, wing:Int, beak:String, color:String){
        this.name=name
        this.wing=wing
        this.beak=beak
        this.color=color
    }

    constructor(name:String, color:String){
        this.name=name
        this.wing=2
        this.beak="short"
        this.color=color
    }
}

fun main(){
    val coco= Bird("mybird",2,"short","blue")    // 첫 번째 부 생성자 호출
    val coco2=Bird("secondvird","red")  //  두 번째 부 생성자 호출
}

 

댓글