Notice
Recent Posts
Recent Comments
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 |
Tags
- 참조변수타입변환
- string메서드
- 코딩테스트
- 자바
- API
- 스프링
- 날씨API
- 프로그래머스
- API명세서
- 동전교환알고리즘
- 스레드동기화
- 백준
- SQL
- 파일사용권한
- 향상된for문
- 루트사용자
- Spring
- 배열탐색
- 프로젝트
- openapi
- SQ3R
- 제너릭메서드
- staging_area
- ChatGPT
- 4A피드백
- 재귀적사고
- 성장형마인드셋
- 99클럽
- Java
- 네이티브애플리케이션
Archives
- Today
- Total
개발 공부용
[JAVA] 가변 인자 본문
가변 인자는 매개변수 개수를 유동적으로 받을 수 있는 기능이다.
메서드나 생성자를 호출할 때 인자의 개수를 정하지 않고 넘길 수 있게 해준다.
public void printNames(String... names) {
for (String name : names) {
System.out.println(name);
}
}
이와 같이 타입 뒤에 ... 을 붙여 사용한다.
가변 인자 규칙
- 가변 인자는 내부적으로 배열로 처리된다.
- 하나의 메서드에 가변 인자는 하나만 사용 가능하다.
- 가변 인자는 마지막 매개변수여야 한다.
데이터가 외부에서 바뀌면 안될 때나 멀티스레드 환경에서는
일관성과 불변성을 위해서 가변 인자를 받아서 불변 리스트(List.of)로 만든다.
//불변 리스트 아닌 경우
BasicInfo(Role... roles) {
this.roles = roles; //외부 배열 참조 그대로 저장
}
Role[] roles = { Role.TANK, Role.MAGE };
//1. 생성자 호출
BasicInfo galio = new BasicInfo(roles);
//2. 외부 배열 변경
roles[0] = Role.DEALER;
//3. galio 내부의 역할도 바뀜
위와 같이 불변 리스트가 아닌 경우에는 외부 배열 참조를 그대로 저장하여
roles 배열이 변경되면 그대로 galio의 역할도 바뀌게 된다.
→ 캡슐화가 깨진다.
//불변 리스트로 변경
BasicInfo(Role... roles) {
this.roles = List.of(roles); //배열을 복사해서 불변 리스트 생성
}
Role[] roles = { Role.TANK, Role.MAGE };
//1. 생성자 호출
BasicInfo galio = new BasicInfo(roles);
//2. 외부 배열 변경
roles[0] = Role.DEALER;
//3. galio의 역할 바뀌지 않음
위와 같이 배열을 복사해서 불변 리스트로 사용하게 하면
외부 배열이 변경되어도 galio의 역할이 바뀌지 않는다.
'Java|Spring' 카테고리의 다른 글
Spring - Test, AssertJ, TDD (0) | 2025.04.03 |
---|---|
Spring - ORM, JPA, 커넥션 풀 (0) | 2025.04.01 |
Spring - Websocket, Simple Broker, External Broker (0) | 2025.03.28 |
Spring - 웹소켓과 STOMP (0) | 2025.03.27 |
Spring - IoC, DI, AOP (0) | 2025.03.26 |