1) Package
: 클래스와 소스 파일을 관리하기 위한 디렉터리 구조의 저장공간
package MainDirectory.SubDirectory
class 클래스{
}
- 디렉터리가 계층구조로 만들어져 있으면 온점(.)으로 구분해서 각 디렉터리를 모두 나열해준다.
2) 추상화
- 설계 단계 : 클래스의 이름과 그 안에 포함될 기능들을 유추하여 메서드 이름으로 먼저 나열한다.
- 이 때 명확한 코드는 설계단계에서 메서드 블록 안에 직접 코드를 작성, 그렇지 않은 경우는 구현 단계에서 코드를 작성하도록 메서드 이름만 작성한다. → 이것을 추상화라고 하며 abstract 키워드를 사용해서 명시한다.
|
1
2
3
4
5
6
7
|
abstract class AnimalClass {
abstract fun birth()
fun run(animal : String){
println("${animal} is running")
}
}
|
cs |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class DogClass : AnimalClass(){
val name : String = "모찌"
val bithday : String = "9월 26일"
override fun birth() {
println("우리 ${name}는 ${bithday}에 태어났어")
}
}
fun main(args: Array<String>){
val dogClass = DogClass()
dogClass.birth()
dogClass.run(dogClass.name)
}
|
cs |
→ 추상 클래스는 독립적으로 인스턴스화 할 수 없기 때문에 구현 단계가 고려되지 않는다면 잘못된 설계가 될 수 있다.
3) 인터페이스
- 실행코드 없이 메서드 이름만 가진 추상 클래스라고 봐도 무방하다.
- 즉, 누군가 설계해 놓은 개념 클래스 중에 실행 코드가 한 줄이라도 있으면 추상화, 코드 없이 메서드 이름만 나열되어 있으면 인터페이스이다.
- 인터페이스는 상속 관계의 설계보다는 외부 모듈에서 내가 만든 모듈을 사용할 수 있도록 메서드의 이름을 나열해둔 일종의 명세서로 제공된다.
- interface 예약어를 사용하여 정의할 수 있고, 인터페이스에 정의된 메서드를 오버라이드해서 구현할 수 있다.
- 코틀린은 프로퍼티도 인터페이스 내부에 정의할 수 있는데, 대부분의 객체지향 언어에서는 지원하지 않는다.
|
1
2
3
4
5
6
|
interface InterfaceTest{
var score1 : Int
var score2 : Int
fun testScore()
}
|
cs |
- 인터페이스의 프로퍼티와 메서드 앞에는 abstract 키워드가 생략된 형태이다.
- get() / set()을 통해 값을 지정할 수도 있다.
· 클래스에서 인터페이스 구현
1) 인터페이스를 클래스에서 구현할 때는 상속과는 다르게 생성자를 호출하지 않고 이름만 지정해주면 된다.
콜론(:)을 사용한다.( java에서는 implement)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class InterfaceImplClass : InterfaceTest{
override var score1: Int = 60
override var score2: Int = 90
override fun testScore() {
println(score1+score2)
}
}
fun main(){
val interfaceImplClass = InterfaceImplClass()
interfaceImplClass.testScore()
}
|
cs |
2) 인터페이스를 클래스의 상속형태가 아닌 소스코드에서 직접 구현할 때도 있는데, object 키워드를 사용해서 구현해야한다.
→ 안드로이드 프로젝트에서 자주 사용하는 형태
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class InterfaceImplClass {
val interfaceTest = object : InterfaceTest{
override var score1: Int = 100
override var score2: Int = 100
override fun testScore() {
val total = score1 + score2
println(total)
}
}
}
fun main(){
val interfaceImplClass = InterfaceImplClass()
interfaceImplClass.interfaceTest.testScore()
}
|
cs |
'차근차근 코틀린' 카테고리의 다른 글
| [Kotlin] High Order Function(고차함수) (0) | 2021.06.05 |
|---|---|
| 차근차근Kotlin(8) - 접근제한자, Generic, Null Safety (0) | 2020.09.08 |
| 차근차근 Kotlin(5) - 함수 (0) | 2020.09.06 |
| 차근차근 Kotlin(4) - 반복문 for, while (0) | 2020.09.06 |
| 차근차근 Kotlin(3) - Array, Collection (0) | 2020.09.04 |