Sablog Models/언어 2

왜 abstract static은 금지되어 있는가?

자바(Java)로 객체지향을 처음 접하는 사람이 꽤 흔하다. 이들이 가장 많이 하는 실수이면서 잘 풀리지 않는 의문 중 하나가 stackoverflow에 차고 넘치는 'abstract static'이다. abstract static으로 규격을 만들어 놓으면 인스턴스화할 필요는 없으면서 상속될 수는 있으므로, 프로그램 내에서 문맥의 영향을 받지 않는 메서드를 모아 쓰기 좋은 구조일 것이다. 이런 패턴은 상당히 많은 프로그램에 적용될 수 있을 것이다. 그런데 왜 그런 좋은 게 금지되는 걸까? 답은 먼 곳에 있지 않다. 자바는 객체지향 언어라는 것. 그리고 그 중에서도 클래스-인스턴스 관계를 매우 엄밀하게 따지는 언어라는 것이다. 일견 자바의 static은 C++의 static과도, Python의 classm..

삼항 연산자의 우선 순위와 싱글턴 패턴의 작성

LinkManager 클래스에 private LinkManager()와 private static LinkManager sInstance;가 있다고 가정하자. 예를 들면 public static LinkManager getInstance(...) 말미에서, return sInstance == null ? sInstance = new LinkManager() : sInstance; 이런 코드는 가능하지만, return sInstance != null ? sInstance : sInstance = new LinkManager(); 이건 불가능하다. 이건 C/C++에서 업어온 삼항연산자의 정의 때문이다. C11의 정의는 다음과 같다. (6.5.14) logical-OR-expression: logical-AN..