Class | 분류, 범주 |
Property | 속성(Attribute), 변수(Variable), 필드(Field), 데이터(Data) |
Method | 함수(Function), 동작(Operation), 행동(Behavior) |
Object | 인스턴스(Instance) |
- 자바에서 사용하는 필드는 코틀린에서 프로퍼티로 부른다.
++ 클래스 선언 ++
- 클래스는 class 키워드로 선언
- 클래스의 본문에 입력하는 내용이 없다면 { }를 생략
- 클래스의 멤버는 생성자, 변수, 함수, 클래스로 구성
- 생성자는 constructor라는 키워드로 선언하는 함수
- 코틀린에서 class는 public이 디폴트
class Bird {
// 프로퍼티...
// 메서드...
}
- 객체를 생성해 사용하며 객체로 클래스의 멤버에 접근
- 객체를 생성할 때 new 키워드를 사용하지 X
- 그냥 생성자를 호출하면 객체생성이 되는것..
package com.example.pp112
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: $vol")
}
fun main() {
val coco = Bird() // 클래스의 생성자를 통한 객체 생성 (new예약어 없음)
coco.color = "red"
println("coco.color: ${coco.color}") // 객체의 멤버 프로퍼티 읽기
coco.fly() // 객체의 멤버 메서드 사용
coco.sing(3)
}
Bird 클래스 만들어 보기 예제
++ 객체(Object) ++
- Bird 클래스란 일종의 선언일 뿐 실제 메모리에 존재해 실행되고 있는 것이 아님
- 객체(Object)는 물리적인 메모리 영역에서 실행되고 있는 클래스의 실체
- ==> 클래스로부터 객체를 생성해 냄
- 구체화 또는 인스턴스화(instantiate)되었다!!
- 메모리에 올라간 객체를 인스턴스(instance)라고도 부름
++ 생성자(Constructor) ++
- 클래스를 통해 객체가 만들어질 때 기본적으로 호출되는 함수
- 객체 생성 시 필요한 값을 인자로 설정할 수 있음
- 생성자를 위해 특별한 함수인 constructor()를 정의
class 클래스명 constructor(필요한 매개변수들..) { // 주 생성자의 위치
....
constructor(필요한 매개변수들..) { // 부 생성자의 위치
// 프로퍼티의 초기화
}
[constructor(필요한 매개변수들..) { ... }] // 추가 부 생성자
...
}
** 주생성자와 부 생성자의 위치 확인
** 오버로딩 가능 (적재)
// 주 생성자 선언
class User constructor() {
}
// constructor 키워드 생략 예
class User() {
}
// 매개변수가 없는 주 생성자 자동 선언
class User {
}
주 생성자(Primary Constructor)
- 클래스명과 함께 기술되며 보통의 경우 constructor 키워드를 생략 가능
부 생성자(Secondary Constructor)
- 클래스 본문에 기술되며 하나 이상의 부 생성자를 정의 가능
- 클래스에 부 생성자를 하나 혹은 그 이상 포함할 수 있다. ==> 매개변수는 서로 달라야 함
package com.example.pp116
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 fly() = println("Fly wing: $wing")
fun sing(vol: Int) = println("Sing vol: $vol")
}
fun main() {
val coco = Bird("mybird", 2, "short", "blue")
println("coco.name => ${coco.name}")
println("coco.color => ${coco.color}")
coco.fly()
coco.sing(3)
}
부 생성자를 사용하는 Bird 클래스 예제
package com.example.pp118
class Bird {
var name: String
var wing: Int
var beak: String
var color: String
constructor(_name: String, _wing: Int, _beak: String, _color: String) {
name = _name
wing = _wing
beak = _beak
color = _color
}
fun fly() = println("Fly wing: $wing")
fun sing(vol: Int) = println("Sing vol: $vol")
}
fun main() {
val coco = Bird("mybird", 2, "short", "blue")
println("coco.name => ${coco.name}")
println("coco.color => ${coco.color}")
coco.fly()
coco.sing(3)
}
this 키워드 생략하는 경우.
- '_'를 매개변수에 사용하고 프로퍼티에 this를 생략할 수 있음
package com.example.pp120
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, _beak: String) {
name = _name
wing = 2
beak = _beak
color = "grey"
}
fun fly() = println("Fly wing: $wing")
fun sing(vol: Int) = println("Sing vol: $vol")
}
fun main() {
val bird1 = Bird("mybird", 2, "short", "blue")
val bird2 = Bird("mybird2", "long")
println("bird1.name => ${bird1.name}")
println("bird1.color => ${bird1.color}")
bird1.fly()
bird1.sing(3)
println("bird2.name => ${bird2.name}")
println("bird2.color => ${bird2.color}")
bird2.fly()
bird2.sing(0)
}
여러 개의 부 생성자 지정 예제
주생성자
초기화 (우선순위)
1. 명시적, 2. 생성자, 3. 블록
package com.example.pp121
// 주 생성자 선언
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: $vol")
}
클래스명과 함께 생성자 정의
package com.example.pp122
// 주 생성자 선언
class Bird6(_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: $vol")
}
fun main() {
val coco = Bird6("Yourbird", 2, "long", "red") // 기본값이 있는 것은 생략하고 없는 것만 전달 가능
println("coco.name: ${coco.name}, coco.wing: ${coco.wing}")
println("coco.color: ${coco.color}, coco.beak: ${coco.beak}")
}
클래스명과 함께 생성자 정의 - constructor 키워드 생략
package com.example.pp123
// 주 생성자 선언
class Bird7(var name: String, var wing: Int, var beak: String, var color: String) {
// 프로퍼티 - 위에 var 혹은 val로 선언하므로서 프로퍼티가 이미 포함됨
// 메서드
fun fly() = println("Fly wing: $wing")
fun sing(vol: Int) = println("Sing vol: $vol")
}
fun main() {
val coco = Bird7("bird", 11, "long", "orange")
// 기본값이 있는 것은 생략하고 없는 것만 전달 가능
println("coco.name: ${coco.name}, coco.wing: ${coco.wing}")
println("coco.color: ${coco.color}, coco.beak: ${coco.beak}")
}
클래스명과 함께 생성자 정의 - 프로퍼티가 포함된 주 생성자
package com.example.pp124
// 주 생성자 선언
class Bird6(var name: String, var wing: Int, var beak: String, var color: String) {
// 초기화 블록
init {
println("-------------초기화 블록 시작--------------")
println("이름은 $name, 부리는 $beak")
this.sing(3)
println("-------------초기화 블록 끝----------------")
}
// 메서드
fun fly() = println("Fly wing: $wing")
fun sing(vol: Int) = println("Sing vol: $vol")
}
fun main() {
val coco = Bird6("Yourbird", 2, "long", "red")
// 기본값이 있는 것은 생략하고 없는 것만 전달 가능
println("coco.name: ${coco.name}, coco.wing: ${coco.wing}")
println("coco.color: ${coco.color}, coco.beak: ${coco.beak}")
}
초기화 블록이 포함된 주 생성자
- 초기화 블록에는 간단한 코드가 허용된다.
package com.example.pp125
// 프로퍼티의 기본값 지정
class Bird10(var name: String = "NONAME", var wing: Int = 2, var beak: String, var color: String) {
// 메서드
fun fly() = println("Fly wing: $wing")
fun sing(vol: Int) = println("Sing vol: $vol")
}
fun main() {
val coco = Bird10(beak="long", color="red")
// 기본값이 있는 것은 생략하고 없는 것만 전달 가능
println("coco.name: ${coco.name}, coco.wing: ${coco.wing}")
println("coco.color: ${coco.color}, coco.beak: ${coco.beak}")
coco.fly()
}
프로퍼티의 기본값 지정
- 생성시 필요한 기본값을 지정할 수 있다.
'Mobile > Kotlin' 카테고리의 다른 글
[Kotlin] #7 : 정보 은닉 캡슐화 (연관, 의존, 집합, 구성) 230220 (0) | 2023.02.20 |
---|---|
[Kotlin] #6 : 상속과 클래스 230217 (0) | 2023.02.20 |
[Kotlin] #4 : 예외처리 230216 (0) | 2023.02.16 |
[Kotlin] #3 : 기본 연산자, 비트 연산자, 변수와 함수, 반복문, 조건문, 람다식 230213 (0) | 2023.02.15 |
[Kotlin] #2 : 변수, 함수, null, 세이프콜, 엘비스 연산자, 스마트 캐스트 230213 (0) | 2023.02.13 |
댓글