컴퓨터는 이진법으로만 대화한다. 그럼 우린 어떻게 영어로된 코딩으로 컴퓨터를 작동시킬까?

 

어셈블리어

먼저 어셈블리어라고해서 덧셈 뺄셈등 자주 사용하는 것들은 0010 이건 ADD라고하자 0101이건 뺄셈이라고 하자 2진수대신 기호로 쓰기 시작하고 저 기호에대한 번역은 번역 역할만 담당하는 add를 0010으로 바꿔주는 어셈블러 SW가 담당한다. 하지만 이 방식에는 치명적인 단점이 있다. Cpu가 발전함에 따라 교체가되는데 교체 될때마다 번역기를 다시 만들어야 하는 경우가 생긴다.

 

고급언어 

흔히 우리가 쓰는 java, c, fortan, c#등 사람말에 가까운 언어로 우리가 흔히들 프로그래밍할 때 사용한다. 이 때 이 말들을 해석하는 번역기를 '컴파일러' 라고 한다. (주의:꼭 기계어로만 번역되는 것은 아니다!)

 

컴파일러의 명확한 정의 !

 

한 언어로 쓰여진 소스프로그래을 읽어서 다른언어로 된 의미가 같은 타겟프로그램으로 번역해주는 프로그램

 

%

이 정의를 보며 전에 했던 스프링 프로젝트가 생각난다. 때는 바야흐로 스프링으로 복잡한 쿼리문을 작성하기 위해 jpql혹은 mybatis 혹은 Querydsl을 선택해야할 상황이었다. 그 때 현업에서 일하는 지인에게 물어본 결과 Querydsl을 이용하는것을 추천한다길래 이유를 찾아보니   jpql이나 mybatis는 직접 쿼리를 스트링으로 입력해줘야하는데 Querydsl은 자바코드로 이뤄져 있다. 만약에 스트링에서 오타가나면 런타임시점으로 에러가 잡혀 어디가 오류인지 찾기 힘들고 매우 치명적이다.  하지만 자바로 이루어진 Querydsl은 컴파일 시점에서 error 생겨 개발단계에서 에러를 잡을 수 있기 떄문에 좋다. 

%

note

저급언어로 번역하면 compiler 

동일 -> rewritter  고급 -> decompiler(바이트 코드가 아닌 소스가 보임,, ㅇㅂㅇ@!) 

 

원래는 .java파일(고급언어) ->컴파일러-> .class파일 (JVM을 위한 코드)

 

&&&&여기서 자바 컴파일러의 특징@!!!!!!

1. JAVA파일에 오류가 있는지 검사함

2. JVM을 위한 코드(바이트 코드) 생성 

 

여기서 2번은 왜? 그냥 기계어로 번역하면 되잖아! 라는 의문점을 가진다. 하지만 왜 아직도 우리가 편리한 파이썬을 안쓰고 자바를 많이 쓰는가 생각해보자면 JAVA의 최대 장점 JVM을 통해 플랫폼 독립적으로 실행 가능한 환경을 제공해 한 번 작성된 코드로 다양한 환경의 하드웨어 및 OS 어디서든 실행하기 위해 이렇게 JVM을 위한 바이트코드로 바꾼다. 

 

즉 각 환경마다 JVM이 필요한게 아니라 하나의 컴파일러로 여러 플랫폼에서 사용가능 

 

이 밑으로 앞으로 배울 이론들 ... 차근차근 해보자 매우 중요한 과목, 백엔드 개발자 면접 필수 질문 내용이다

 

컴파일러의 처리과정

컴파일러의 각 단계

이번  학기 목표 나만의 컴파일러 만들귕 ^~^ 

 

+ Recent posts