반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 보안
- 소프트웨어
- 자바스크립트
- 딥러닝
- 자료구조
- 컴퓨터공학
- 데이터베이스
- 파이썬
- Yes
- 머신러닝
- 사이버보안
- springboot
- 컴퓨터과학
- 인공지능
- 프로그래밍
- 프로그래밍언어
- 알고리즘
- I'm Sorry
- 데이터과학
- 데이터분석
- 클라우드컴퓨팅
- 디자인패턴
- 빅데이터
- 웹개발
- 데이터구조
- 네트워크
- 네트워크보안
- 컴퓨터비전
- 소프트웨어공학
- 버전관리
Archives
- Today
- Total
스택큐힙리스트
자바 var 키워드 활용법과 주의점 본문
반응형
1. var는 무엇인가?
- 지역 변수 타입 추론(Local-Variable Type Inference) 기능입니다. var msg = "hello";처럼 선언하면 컴파일러가 오른쪽 값을 보고 타입을 확정합니다. 런타임 오버헤드는 없고, 한 번 결정된 타입은 바꿀 수 없습니다.
- JDK 10에 도입됐고, JDK 17·21에서도 동일하게 동작합니다.
2. 쓸 수 있는 곳 · 못 쓰는 곳
- 가능: 메서드·생성자·블록 내부의 지역 변수, 향상된 for-loop, try-with-resources.
- 불가능:
- 필드(멤버 변수)
- 메서드 매개변수와 반환 타입
- 제네릭 타입 매개변수
- 초기값이 없거나 null인 변수
- 배열 리터럴 {…} 표현(단 new int[]{…}는 가능)
3. 왜 사용할까? — 장점 3가지
1. 보일러플레이트 제거긴 제네릭 선언을 줄이면 코드 리뷰 난이도가 확 줄어듭니다.
Map<String, List<Map.Entry<String, Integer>>> complex = new HashMap<>();
var complex = new HashMap<String, List<Map.Entry<String, Integer>>>();
2. 의미 있는 변수명 강제
타입이 사라지니 변수명이 자연히 구체적이어야 읽기 쉽습니다.
3. IDE 리팩터링 부담 감소
클래스명을 바꿔도 좌변을 고칠 필요가 없습니다.
4. 코딩 예시 — 이렇게 쓰면 깔끔하다
// 1) 빌더 패턴 결과 받기
var user = User.builder()
.name("Alice")
.age(20)
.build();
// 2) 스트림 파이프라인 중간 처리
var total = orders.stream()
.filter(o -> o.isPaid() && !o.isCanceled())
.mapToInt(Order::getPrice)
.sum();
// 3) 리소스 자동 닫기
try (var in = Files.newBufferedReader(path)) {
// …
}
예제와 같이 우변만 봐도 타입이 분명한 경우라면 var가 가독성을 높입니다.
5. 주의해야 할 함정
- 타입이 모호하면 쓰지 말 것
var result = service.execute(); // 반환형이 바로 안 보이면 독이 됩니다
- 람다·메서드 참조 남용
var func = integer -> true; 는 컴파일 안 됩니다. 람다 파라미터에 애노테이션을 달려면 (var x) ->처럼 괄호를 써야 합니다. - 스트림 체인이 길어질 때
중간 결과를 var로 받으면 타입 추적이 어려워집니다. IDE 도움 없이도 이해되는 길이를 넘어가면 명시 타입으로 바꿔 주세요. - 초기화·null 규칙
var n; 또는 var s = null; → 컴파일 오류. 반드시 값이 있어야 타입을 추론할 수 있기 때문입니다.
6. 스타일 가이드 한 줄 요약
“타입이 명확할 때만 var를 쓰고, 그 외에는 명시 타입을 유지하라.”
Velog·Tistory 고수들의 공통된 결론입니다. 자바는 여전히 정적 타입 언어이므로 가독성 ↔ 간결성 균형이 핵심입니다.
반응형
'개발' 카테고리의 다른 글
[JAVA] 람다식과 메서드 레퍼런스 (1) | 2025.07.09 |
---|---|
자바 스프링 개발 시작하기 - 3일차 컬렉션과 제네릭으로 학생 명단 관리 (1) | 2025.07.09 |
JUnit5로 BankAccount 단위 테스트 작성법 (1) | 2025.07.08 |
자바 스프링 개발 시작하기 - 2일차 조건문·반복문과 객체 설계 (0) | 2025.07.08 |
자바 스프링 개발 시작하기 - 1일차 환경 세팅과 기초 문법 맛보기 (1) | 2025.07.07 |
Comments