TIL/selfpractice

클래스와 설계-2

crablo 2024. 1. 16. 21:27
728x90

익스텐션

kotlin은 클래스,메서드,프로퍼티에 대해 익스텐션을 지원한다.

이미 만들어져 있는 클래스에 다음과 같은 형태로 메서드를 추가할 수 있다.

fun 클래스.확장할 메서드(){

}

상속이 미리 만들어져 있는 클래스를 가져다 쓰는 개념이라면 익스텐션은 미리 만들어져 있는 클래스에 메서드를 넣는 개념

자식이 만든 클래스에 사용하기보다는 누군가 작성해둔, 이미 컴파일되어 있는 클래스에 메서드를 추가하기 위한 용도로 사용

익스텐션을 사용한다고 해서 실제 클래스의 코드가 변경되는 것은 아니며 단지 실행 시에 도트 연산자로 호출해서 사용할 수 있도록 해줌

특별한 경우를 제외하고는 거의 메서드 확장 용도로 사용됨

상속연습

위의 예시를 보면 자식 클래스를 이용해서 부모클래스안의 메서드를 출력할 수 있다.

override fun notOpend(){ // 오버라이드 되지 않고 에러가 발생한다.

 

프로퍼티 오버라이드 연습

 

 

접근 제한자

kotlin에서 정의되는 클래스,인터페이스,메서드,프로퍼티는 모두 접근 제한자(Visibility Modifiers)를 가진다.

함수형 언어라는 특성 때문에 코틀린은 기존 객체지향에서 접근 제한자의 기준으로 삼았던 패키지 대신에

모듈 개념이 도입되었다.

internal 접근 제한자로 모듈 간에 접근을 제한할 수 있다.

 

[접근 제한자의 종류]

접근 제한자는 서로 다른 파일에게 자신에 대한 접근 권한을 제공하는 것인데 각 변수나 클래스 이름 앞에

아무런 예약어를 붙이지 않았을 때는 기본적으로 public 접근 제한자가 적용된다.

접근제한자 제한 범위
private 다른 파일에서 접근할 수 없다.
internal 같은 모듈에 있는 파일만 접근할 수 있다.
protected private와 같으나 상속 관계에서 자식 클래스가 접근가능
public 제한 없이 모든 파일에서 접근할 수 있다.

상속 접근제한자 테스트
자식클래스가 아닌 strangerClass에서 접근

 

상속관계가 아닌 외부클래스에서 Parent 클래스를 생성하고 사용할때 상속관계가 아니기 때문에 public 과 internal에만 접근가능함

 

제네릭

제네릭에 입력되는 값은 타입을 자유롭게 사용하기 위한 설계도구

예를들어 String 타입의 값을 입력한다면 <String>으로 적어주면 된다.

728x90

'TIL > selfpractice' 카테고리의 다른 글

지연 초기화  (1) 2024.01.17
null safety  (1) 2024.01.17
클래스와 설계-1  (0) 2024.01.16
kotlin 함수 문제1,2,3  (0) 2024.01.16
kotlin 배열과 컬렉션  (0) 2024.01.15