Java 의문점 정리 1 — JavaScript와의 차이점

2025. 11. 7. 22:30Frontend

우테코 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...?