자바 버전업 하면서 퇴화된 프레임워크
바로 Swing 인데요. 자바 진영의 메인 GUI 프레임워크.
객체지향 개념을 두 눈으로 보면서 “체감”할 수 있는 프레임워크라,
예전에는 대학교에서도 꽤 다루는 녀석이었죠.
(지금도 이건 마찬가지. 객체지향, 다형성, 인터페이스 개념이 아직도 헷갈리시면 Swing 갖고 놀아보세요. 직빵입니다.)
가끔 장난감으로 Swing 갖고 놀거든요.
근데 자바 8 에서 잘만 돌아가는 녀석이 자바11 이상버전만 붙이면 빌빌거립니다.
이 Swing 특징이, 쓰레드 세이프하지 않은 메소드들이 꽤 있어서,
교착상태가 꽤 종종 발생합니다.
보통은 SwingUtilities 에서 제공하는 메소드로 해결을 보지만
사실 이거 안써도, 화면 띄운 채로 컴포넌트 막 제거하고 동적으로 붙이는 것도 가능 했었거든요.
가끔 교착상태 발생하는 경우, 그 로직 발생 전에 해당 영역을 숨김처리만 해도 해결됐었어요.
자바 8까지는 말이죠…
자바25 테스트하는 겸 돌려보니까
일단 창 뜨는 속도부터 확 느려졌고
버튼 눌러 이벤트 발생시키니까, 딱 그, 동적 처리하는 부분에서
어김없이 프로그램이 멈춰버리네요. 시간지나면 다시 돌기는 하는데…
그래서 겸사겸사
자바17, 11도 테스트해봤더니 똑같습니다.
자바8 (오픈JDK 도 따로해봄. zulu 것으로) 에선 멀쩡히 잘 돌아가는 게
이후버전에서는 성능이 대폭 하락합니다.
여하튼 그래요.
뭐 자바로 GUI 개발하는 사람 자체가 이제는 거의 없겠지만요.
아 그리고
Swing을 아직도 붙들고 있는 이유, Swing이 아직 가지고 있는 장점이 있기 때문입니다.
아직도 자바 런타임에 포함이 되어 있고 (다른 자바 클래스와의 호환 문제로 제거될 가능성도 거의 없고)
이로인해 배포 파일의 용량이 대폭 작아집니다.여전히 PC의 다양한 OS와 CPU 아키텍처 호환 (자바의 장점을 그대로 가져갈 수 있음)
얘 건드는 손맛이 은근히 있습니다.