자바와 호이스팅?

Haechan Kim·2024년 10월 27일

Javascript

목록 보기
3/5

Hoisting

js와 같은 언어에서 변수, 함수 선언을 해당 스코프의 최상단으로 끌어올리는 동작을 말함.
변수, 함수 선언이 실제 코드 위치보다 앞서 실행되는 것처럼 동작하게 하는 것.

console.log(name); // 에러 발생 x, undefined
let name = "name";

자바의 경우 변수의 선언은 변수가 사용되기 전 이미 변수가 선언되어 있어야 함.
변수는 선언된 위치부터 해당 블록 내에 사용 가능, 사용 전 선언되지 않은 변수는 컴파일 오류 발생시킴.

System.out.println(name); // 컴파일 에러
String name = "name";

자바의 메서드 선언 순서

자바는 메서드 호출 위해서는 선언 위치에 제한 두지 않음.
-> 선언 위치와 상관 없이 호출 가능.
Java 컴파일러가 전체 코드 분석 후 메서드 시그니처 확인해 호출 대산 메서드 식별하기 때문.
컴파일러는 메서드 시그니쳐 기반으로 호출 대상 메서드 찾고, 런타임 시 해당 메서드 실행.

public void m1() {
	test2(); //  후에 선언 되었지만 에러 발생 X.
 
public void m2() {
	System.out.println("test!");
}

호이스팅과의 차이

메서드 시그니처를 확인해 호출 대상 메서드 식별은 정적 타입 언어 (자바) 에서 컴파일러가 사용되는 메소드 식별하는 과정.
메서드 시그니처는 메서드 이름, 매개변수 타입, 반환값 타입으로 구성.
컴파일러는 호출하는 코드에서 매개변수 타입, 순서 기반으로 호출 대상 메서드 찾고 호출.

호이스팅은 같은 동적 타입 언어 (js) 에서 변수, 함수 선언을 스코프 상단으로 옮기는 동작!
두 개념은 서로 다른 언어와 동작 원리에 기반,
자바는 호이스팅 개념 적용되지 않음!!

<참고>

0개의 댓글