본문 바로가기
NSLog(@"%@", dailyLog)

[Kotlin 20200804] 객체 지향 프로그래밍 - 인터페이스

by 틴디 2020. 8. 4.
728x90
반응형

참고 및 인용 도서 : Do it! 코틀린 프로그래밍

인터페이스에서 참조

- 인터페이스 참조하는 클래스 -> 인터페이스 가이드에 따라 내용 구현

- 다중 상속은 불가능 하지만 다중 인터페이스 지정은 가능

- 여러 인터페이스에 의해 메서드나 프로퍼티 명이 중복되는 경우 -> 앵글 브래킷(<>)을 사용

open class A {
    open fun a() = println("class a and method a")
    fun b() = println("class a and method b")
}

interface B {
    fun a() = println("interface a method a")
    fun c() = println("interface b method b")
}

class C : A(), B{
    override fun a() = println("class c and override method a")
    fun test() {
        a()
        c() // 인터페이스의 c() 메소드 호출
        super<A>.a()
        super<B>.c()

    }
}

fun main() {
    val c = C()

    c.test()
}

 

05_5 정보 은닉 캡슐화

- 가시성 지시자

private 외부 접근 불허. private 멤버는 해당 클래스 내부에서만 접근 가능. 같은 파일에서는 객체 생성 가능

public 기본값이며 어디서든 접근 가능

protected 하위 상속 요소는 접근 가능 외부에서 접근 불가. 최상위 선언된 요소 지정 불가. 클래스나 인터페이스 요소의 멤버에만 지정 가능 (상속된 하위 클래스에서는 자유롭게 접근 가능, 외부 클래스나 객체 생성 후 점 표기에 의한 접근은 불가)

internal 같은 정의의 모듈 내부에서 접근 가능 -> 모듈이 달라지면 접근 불가. import를 이용하여 필요한 모듈을 임포트하면 사용 가능

- 생성자에서도 사용 가능

- 주 생성자에 가시성 지시자를 사용하는 경우 constructor 키워드 생략 불가

 

05_6 클래스간의 관계

- 약한 관계 : 연관, 의존 -> 이용하는 개념, 서로의 생명 주기가 다름

- 강한 관계 : 구성 -> 두 개체의 생명 주기가 의존되어 있음 

 

연관(Association)

- 클래스의 참조를 유지함

- 서로 분리된 클래스가 단방향 혹은 양방향으로 연결을 가지는 관계

- 두 요소가 다른 생명주기를 가짐

 

의존(Dependency)

- 클래스의 참조를 유지하지 않음

 

집합(Aggregation)

- 특정 객체를 소유

- 소유되는 객체는 소유될 다른 객체를 선택할 수 없고 소유하는 객체가 소유되는 객체를 소유함

 

구성(Composition)

- 객체 내부에서 포함하고 있는 객체를 생성하기 때문에 소유자 클래스가 생성되면서 구성되고 있던 클래스도 동시에 생성됨

- 만일 소유자 클래스가 삭제되는 경우 소유되고 있었던 클래스도 삭제되기 때문에 같은 생명 주기를 가지게 됨

728x90
반응형

댓글