티스토리 뷰

톱 레벨 클래스는 한 파일에 하나만 담으라는데 이 말을 듣기 전에도 무의식적으로 수행하고 있었다

얼마 전 Kotlin in action을 깔짝 보고 top-level function을 써봤는데 Item25를 읽으면서 자바는 왜 안 되는지 궁금해졌다

그 이유는 자바의 초기 설계와 관련이 깊은데 자바에서는 모든 것이 객체다

다른 말로 하자면 모든 것이 객체 안에 있어야 한다

그렇기 때문에 톱 레벨에는 클래스를 두고 그 안에 변수나 메서드를 둬야 한다

비록 그 클래스가 아무런 의미 없이 컨테이너 역할을 하더라도 말이다

 

코틀린에서는 아마 이런 불필요한 껍데기를 두는 게 꼴 뵈기 싫어서 톱 레벨에 변수나 함수를 선언할 수 있도록 만든 거 같은데 

JVM 언어이고 자바와의 상호 운용성을 제일로 치기 때문에 컴파일 시 우리 몰래 클래스가 만들어진다

코틀린의 다양한 함수들을 설명하는 좋은 글이 있어 첨부한다

 

 

Kotlin From Scratch: More Fun With Functions

Kotlin is a modern programming language that compiles to Java bytecode. It is free and open source, and promises to make coding for Android even more fun.   In the previous article, you learned...

code.tutsplus.com

 

단점이라고 한다면 Namespace의 오염이 있을 수 있다

자바로 예를 들어 YahoConstant와 OhayConstant의 YAHO 변수는 이름이 같기에

YahoConstant.YAHO, OhayConstant.YAHO로 쓸 때는 문제없지만

YahoConstant, OhayConstant 얘네 둘을 static import 갈겨버리면 둘 다 YAHO로 사용할 수 있고

이런 경우 어떤 클래스의 변수를 사용하는지 모르기 때문에 Namespace가 오염되었다고 한다

public class YahoConstant {
  public static final String YAHO = "YAHO";
}

public class OhayConstant {
  public static final String YAHO = "OHAY";
}

 

대규모 프로젝트의 경우엔 Constant 클래스도 단일 클래스보다 의미를 분명히 나눠두고

사용하는 곳에 따라 이름을 달리해 사용하기 때문에 변수명이 같더라도 클래스명이 달라 구분하기 쉽다

코틀린에서는 이때 전부 변수명으로 구분해야 하니 어려울 수 있겠다는 생각이 들었다

모든 것이 객체 나쁘지 않을지도..

 

잠깐 보고 써봤지만 코틀린의 첫인상은 깔끔했다

확실히 이 악물고 자바의 boiler plate를 없애려 한 것 같고

자바와 거의 비슷하지만 그래도 자바 외에 새로운 언어라 재밌었다

개발 병아리에겐 뭐든 새로운 거라 참 재밌다

백엔드를 주로 하지만 협업을 위해 프런트가 어떻게 돌아가는지 알아보려고

인프런에서 vue.js + typescript 강의를 몇 개 사서 봤는데 백엔드처럼 깊게 공부하진 못 했어도 요놈도 참 재밌다

정적 언어를 쓰는 입장에서는 자바스크립트보다 타입스크립트가 다루기 훨씬 편하다

vue.js는 react가 학습 곡선이 높다고 해서 선택한 건데 확실히 best-case가 딱딱 정해져 있어서 다루기 쉬운 것 같다

양질의 자료나 강의도  많고

 

풀 스택 같은 거창한 목표는 없지만 리액트도 배워보고 싶다

프런트가 재밌는 이유는 프로 정신을 갖고 하기보단 진짜 장난감 다루듯 배우기 때문인 것 같다

최근 진행하는 OAuth2 프로젝트에서 Google OIDC, WebClient에서 자꾸 에러가 터져

머리까지 터질 듯했지만 가까스로 해결해냈다

역시 풀고 나면 별거 아닌 문제였으나 날 꽤나 괴롭혔다, 조만간 블로그 글로 옮겨봐야겠다

'Java > Effective Java' 카테고리의 다른 글

[Item27] @SuppressWarnings 알고 쓰자  (0) 2022.03.06
[Item26] 타입으로 안전하게, 유연하게  (0) 2022.03.04
[Item24] Nested Class  (0) 2022.03.01
[Item23] boolean 대신 타입으로  (0) 2022.02.28
[Item22] 규칙 준수  (0) 2022.02.28
댓글
링크
글 보관함
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday