🥸 의문이 생겼다.
읽고 있던 책에 이런 문구가 나왔다.
주석과 마찬가지로 명시적인 변수 타입 지정이 필요 없는 코드를 작성하도록 노력해야 한다.
[책. 자바에서 코틀린으로 p258]
그리고 의문이 생겼다.
'왜 타입추론으로 코딩하도록 노력해야 하지? 명시적 변수타입을 지정하는 스타일이 더 가독성 좋지 않나?'
의문을 풀어보자.
이번에도 나의 친구 GPT에게 물어봤더니 아래처럼 말한다
**"타입이 명확할 때는 추론을 맡기고, 명확하지 않을 때만 타입을 명시적으로 지정"**하는 게 더 함수형적이고, 코드를 더 깔끔하고 간결하게 유지할 수 있는 방법이지. 😊
대화 내용을 좀 더 정리해 보겠다.
타입 추론을 선호하는 이유
타입 추론은 컴파일러가 자동으로 타입을 추론한다.
이런 방식은 함수형 프로그래밍에서 선호되는 스타일이다.
선호되는 이유는 "가독성이 좋다", "유지보수성이 높다", "간결한 코드를 추구한다"의 이유가 있다.
- 가독성: 이미 타입이 명확한 코드에서는 굳이 명시하지 않는 게 더 깔끔하다.
- 유지보수성 향상: 추후 코드 수정할 때 타입을 일일이 변경하지 않아도 됨.
- 주석과 비슷: 코드가 길어지고 의도파악하는데 힘들어 질 수 있다.
// kotlin 예시
val name = "Hello" // <- 코드량 더 적고 가독성도 좋다.
val name: String = "hello" // <- "hello"를 보자마자 String인걸 아는데 굳이 명시할 필요 없어 보인다.
// java 예시
var name = "hello";
String name = "hello"; // java 예시는 별 차이가 없다?
😤 하지만, 타입 명시가 유용할 때도 있다!
GPT와 책에서도 언급되었긴 하다. '타입 명시가 코드 이해에 더 도움이 될 때'이다.
내 생각을 더 추가하자면, '별도 함수/메서드를 호출하고 그 결과를 변수로 받을 때'이다.
리턴값 결과는 받았는데 타입이 명시되지 않아서 굳이 그 메서드를 찾아가야 하기 때문이다.
특히 개발자들이 비지니스로직 때문에 만든 메서드인 경우 메서드의 결과를 '개발자'가 추론하긴 쉽지 않다.
(물론 컴파일러는 잘 추론하겠지만...)
즉, 해당 메서드를 굳이 찾아봐야 하는 경우가 많을 것이라 생각한다.
val result = someFunction() // 함수가 어떤 타입을 반환하는지 추론하기 어려울 수 있음
val result: List<Pair<String, Int>> = getPairs() // 반환 타입을 명시적으로 지정
📍결론
전적으로 '가독성' 위주로 판단한다.
가능하면 타입 추론으로 개발해서 깔끔한 코드를 유지하되
개발자가 추론하기 어려운 경우(메서드 반환값 받을 때)에는 타입을 명시한다.
'삽질인가 고찰인가' 카테고리의 다른 글
| 언어코드. 다국어 지원할 때 언어코드는 뭘 써야할까? (1) | 2025.05.14 |
|---|---|
| DataGrip) MongoDB URL로 접속하기 (0) | 2025.02.11 |
| java의 stream에 대하여. 책을 읽어도 이해 안되는거 나만...인가? Stream 동작방식 쉽게 설명해보기. (1) | 2025.01.30 |
| Git 명령어) 중간 commit 삭제하기 (0) | 2024.09.20 |
| Python 클래스 메서드, 클래스 속성, 정적 메서드. 개념 구분/용도/주의사항. 언제 어떻게 쓸까? (1) | 2024.08.08 |