2025. 11. 7. 22:30ㆍFrontend
우테코 8기 1주 차 Java 미션을 하면서
JavaScript와 다른 점과 의문점을 정리해 봤다.
1. 메서드 참조방식 표현이 다르다.
JavaScript 같은 경우에는
// 콜백 함수 적용
arr.map(Number);
// 화살표 함수 적용
arr.map((element) => Number( element ));
두 가지 방식으로 메서드를 간결하게 작성할 수 있다.
이와 다르게 자바는
람다식과 메서드 참조 두 가지 방식으로 간결하게 표현할 수 있다.
// lambda 표현
Arrays.stream(trimArr).forEach((element) -> System.out.println(element));
// method references 표현
Arrays.stream(trimArr).forEach(System.out::println);
둘 다 Java 8에서 도입된 기능이다.
람다는 익명 함수로 작성되고,
메서드 참조는 <클래스명>::<메서드명> 형식으로 작성된다.
2. 클래스 속성 선언 중 final이란?
final 키워드는 값을 단 한 번만 설정할 수 있도록 강제한다.
재할당은 불가능하지만 객체 내부 상태 변경할 수 있다.
JavaScripit의 const와 유사하다.
final ArrayList list = new ArrayList();
System.out.println(list.toString());
// 출력: []
list.add("b");
// 요소를 추가해도 오류가 발생하지 않음
System.out.println(list.toString());
// 출력: [b]
list.remove("b");
System.out.println(list.toString());
// 출력: []
3. Array와 List 타입 차이점
- Array
길이가 고정된 배열이다.
한 번 선언하면 요소를 추가하거나 삭제할 수 없다.
JavaScript Array 타입과 다르게 배열 크기 변경이 제한적이다.
복사본을 수정하거나 새로운 공간을 생성해서 작업해야 한다.
- List
길이가 정해지지 않은 배열이다.
리스트 자체 내장 메서드가 있어서 다양한 방법으로 값을 반환할 수 있다.
ArrayList pitches = new ArrayList();
pitches.add("사과"); // ["사과"]
pitches.remove("사과"); // []
pitches.contains("사과"); // false
Java의 List는 JavaScript의 Array에 가깝다.
둘 다 가변 길이를 가지며 다양한 메서드로 요소를 다룰 수 있다.
메서드를 제공하는 점에서 JavaScript Set과 유사하다고 생각할 수 있지만
JavaScript의 Set은 중복 불가 특성 때문에 Java List와는 다른 자료구조다.
4. toArray() 타입 인자를 할당해야 하는 이유
Arrays.stream(trimArr)
.mapToInt(Integer::parseInt)
.toArray();
mapToInt(Integer::parseInt)는 IntStream을 반환하므로,
배열로 변환하려면 toArray()를 반드시 호출해야 한다.
String[] trimArr = Arrays
.stream(splitArr)
.map(String::trim)
.toArray(String[]::new);
map(String::trim)은 참조형 스트림(Stream<String>)을 반환하기 때문에
toArray()만 사용하면 Object[]로 변환된다.
제네릭 타입은 런타임에 소거(erasure) 되므로,
정확한 타입 생성을 위해 toArray(String[]::new)를 사용해야 한다.
반면 mapToInt()는 기본형 스트림(IntStream)을 반환하므로
별도의 생성자 참조 없이 toArray()만으로 타입을 추론할 수 있다.
참고
- W3Schools. Java Lambda Expressions.
- GeeksforGeeks. Java Method References.
- 위키독스. 자바 문법
- Reddit. Why does toArray() method of ArrayList class...?
'Frontend' 카테고리의 다른 글
| Java 의문점 정리 2 — @ 기호와 주석 (0) | 2025.11.12 |
|---|---|
| Java Stream 알아보기 — Node.js Stream과 다른 점 (0) | 2025.11.09 |
| PostgreSQL RLS는 언제, 어떻게 적용해야 할까: 장단점 및 의문 정리 (0) | 2025.10.12 |
| PostgreSQL RLS(Row Level Security) 내부 동작 알아보기 (0) | 2025.10.11 |
| F5 새로고침으로 CDN 요금이 늘어날까? – CDN 의문점 정리 (0) | 2025.09.28 |