Java에서 ‘static’은 다양한 이유로 사용할 수 있다.
- ‘메모리 관리’를 위해
- ‘공유’를 위해 (클래스 선언 정보와 함께 메모리 영역에 올라간다.)
companion object #
코틀린에서는 static 키워드가 없다.
이를 대체하기 위해 companion object 를 많이 사용한다.
(다른 말로 표현하면) (companion) object 를 통해 조금 더 (OOP와 적절한 방식으로)구현할 수 있다.
예시 코드 #
class MyClass {
companion object {
fun doSomething() {
}
}
}
public final class MyClass {
// 결국에 object 로 만들어서 사용하는 것인데, 이는 OOP 의 방향성에 아주 적절하다.
// 이 부분이 매우 중요하다!!
public static final MyClass.Companion Companion = new MyClass.Companion(null);
public static final class Companion {
public final void doSomething() {
}
private Companion() {
}
public Companion() {
this();
}
}
}
(kotlin에서) static 이 없는 이유? #
‘Singleton’ object 로 구현할 수 있음
- (java) static 은 object 가 아님 (OOP의 방향성과 맞지 않음)
- (kotlin) 위의 예시 코드와 같이 (싱글톤)객체로 구현 가능
- (추가적으로) static 은 모던 프로그래밍 언어에 적절하지 않다고 한다.
가독성/생산성 측면 (Productive-Oriented)
- (java) static 은 장황/지저분한 코드를 생산한다.
- (kotlin) object 구문의 사용은 이 문제를 해결한다.
- 조금 더 생산성, 가독성 측면에서 우수하다고 말한다.