2024/05/16 2

[Java] inner class를 static으로 선언해야 하는 이유

inner class를 static으로 "반드시" 선언해야 하는 이유가 2가지가 있습니다.  첫째, 위 코드를 기반으로 봤을 때, inner class 바깥 클래스의 인스턴스와 암묵적으로 연결되어 GC의 메모리 수거가 잘 수행되지 않을 수 있습니다. 그래서 Intellij에서 inner class를 non-static으로 선언할 경우, static으로 바꾸라는 경고표시가 생깁니다.  사진과 같이, static으로 선언한 경우 외부 참조를 하지 않는 것을 육안으로 확인할 수 있습니다. 둘째, 이러한 외부 참조를 저장하려면 시간과 공간이 많이 소비됩니다. 그래서 외부 참조를 막을 수 있도록 static 키워드를 붙여주는 것이 합리적입니다.  결론멤버 클래스의 인스턴스 각각이 바깥 인스턴스를 참조해야 하는 상..

Java/Java Concept 2024.05.16

[Java] enum 비교에서는 equals(), == 둘 중 어떤 것이 적합한가?

enum class에서 비교는 ==가 적합한가 equals()가 적합한지에 대해서 고민해 봤습니다. 자바의 enum class는 singleton이기 때문에, == 비교가 적합하다고 생각했습니다. (equals() 보다 속도도 빠릅니다)왜냐하면 런타임 시점에서의 NPE 방지뿐만 아니라, 컴파일 시점에 타입 호환성까지 check해주는 장점이 있기 때문입니다. equals() 비교를 통해 값을 비교했다면 그대로 컴파일되었을 것이라고 판단됩니다. enum의 class를 뜯어봤을 때, 결정적으로 == 비교를 하는 것을 확인할 수 있습니다. 즉, == 비교를 내부적으로 하고 있지만, 위의 장점들 뿐만 아니라 비교하려는 상수를 앞에 둬야 NPE를 방지할 수 있는 번거로움을 없애려면 == 비교가 적합하다고 생각합니다..

Java/Java Concept 2024.05.16