개발 일기

면접 1주차 본문

카테고리 없음

면접 1주차

flow123 2022. 2. 8. 14:32

정적 타입 언어와 동적 타입 언어의 차이

타입: 자료형 타입을 뜻함

 

정적 타입 언어:

Ex: Java, C, C++

 

String name = "tuna"

Int num = 123

 

컴파일 변수의 자료형 타입이 결정되는 언어

변수에 들어갈 값의 형태에 따라 직접 변수의 타입을 명시해줘야 .

컴파일 자료형에 맞지 않는 값이 들어있으면 컴파일 에러가 발생함.

 

장점: 타입 에러로 인한 문제점을 초기에 발견 가능. 타입 관련 런타임 오류 방지할 있다.

컴파일 시에 미리 타입을 결정하기 때문에 실행 속도가 빠르다.

코드의 가독성이 좋다. 다수의 협업, 프로젝트의 장기개발/유지보수에 유리하다.

 

단점: 코드 작성 변수형을 결정해줘야 해서 번거롭다.

 

동적 타입 언어

컴파일 자료형을 정하는 것이 아니라 런타임 시에 결정됨.

타입 없이 변수만 선언해서 값을 지정할 있다. 컴파일러가 없다. 

 

Ex. Python, Javascript, PHP .

 

장점: 런타임까지 타입에 대한 결정을 끌고 있기 때문에 유연성이 높다.

컴파일 타입을 명시해주지 안아도 되기 때문에, 코드 작성이 빠르다.

 

단점: 실행 도중에 변수에 예상치 못하는 타입이 들어오는 경우 타입 에러가 발생할 있다.

동적타입 언어는 런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워 진다고 한다.

 

정적 타입 = compile, 동적 타입 스크립트 언어 인가?

 

컴파일 vs 런타임 에러

-컴파일 에러: 문법을 잘못 작성한 경우 (대개 syntax 에러같은 문법적 오류  등) 

-런타임 에러: 프로그램 실행 중 발생한 에러. 논리적으로 잘못된 에러 등. 

 

참고

 https://velog.io/@eunnbi/%EC%A0%95%EC%A0%81%ED%83%80%EC%9E%85-%EC%96%B8%EC%96%B4-vs-%EB%8F%99%EC%A0%81%ED%83%80%EC%9E%85-%EC%96%B8%EC%96%B4

 

Java 코드의 컴파일 과정

Java 컴파일

-컴파일 언어는 기계어로 컴파일 되어야만 실행시킬 있다.

-자바는 컴파일러, 인터프리터가 모두 구현되어 있다.

 

(1) 자바 클래스 파일 (.java) 자바 compiler 통과하고 나면 .class파일 Bytecode 생긴다.

(2) 컴파일 Bytecode JVM 클래스 로더에게 전달된다.

(3) 클래스 로더는 동적 로딩을 통해 필요한 클래스를 로딩 링크해서 런타임 데이터 영역 (JVM 메모리에 올린다)

 

-로드: 클래스 파일을 JVM 메모리에 로드

-검증: 자바 언어 명세 jvm 명세에 명시된 대로 구성되어 있는지 검증

-준비: 클래스가 필요로 하는 메모리 할당 (필드, 메서드, 인터페이스 )

-클래스의 symbolic reference를 다이텍트 reference로 변경 (?)

0과 1로된 주소로 바꿔줌. 

-초기화: 클래스 변수들을 적절한 값으로 초기화함.

 

(4) 실행 엔진은 JVM 올라온 바이트 코드를 명령어 단위로 하나씩 가져와서 실행함.

가지 방식으로 변경함

 

-인터프리터: 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행. 전체적인 실행속도가 느리다.

-jit 컴파일러: 인터프리터 단점보완 위해 도입됨. 바이트 코드 전체를 컴팡이

 

참고

https://gyoogle.dev/blog/computer-language/Java/%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95.html

 

[Java] 컴파일 과정 | 👨🏻‍💻 Tech Interview

[Java] 컴파일 과정 들어가기전 자바는 OS에 독립적인 특징을 가지고 있다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로

gyoogle.dev

 

 

Comments