2025-03-25 살기 위해서

@장태근· March 25, 2025 · 3 min read

  • 나는 왜 성장해야하는가?

컴퓨터 밑바닥의 비밀

1장, 프로그래밍 언어부터 프로그램 실행까지, 이렇게 진행된다

컴파일러는 번역가다

우리의 기록은 소스 파일(source file)이다. 컴파일러소스 파일CPU가 실행할 수 있도록 실행 파일로 변환한다.

토큰은 최소 단위다

컴파일러는 소스 코드에서 토큰(token)을 추출한다. 추출하는 과정을 어휘 분석(lexical analysis)이라고 한다.

링커는 예언자다

소스 파일은 대상 파일(object file)이 존재한다. 대상 파일과 소스 파일을 병합하기 위해 링커(linker)를 사용한다. 링커는 압축 프로그램처럼 소스 파일과 대상 파일을 묶어 하나의 실행 파일을 만든다. 링커는 전역 변수, 외부 모듈 같은 참조할 수 있는 대상에 관심을 둔다.

톺아보기: 자바와 링커

  • 자바도 컴파일이 필요하다. 하지만 이전에 배운 전통적 방식1과 다른 방식을 채택했다. 목적파일을 연결하고 실행 파일을 만들지 않는다.
  • 클래스 로더(Class Loader), 자바는 클래스 로딩, 링킹, 초기화가 모두 '프로그램 실행 중(Runtime)'에 동적으로 이뤄진다.
  • WORA(Write Once, Run Anywhere), 하드웨어 플랫폼에 종속되는 구조를 탈피했다.
  • 링킹은 검증(verification) ->준비(preparation) -> 해석(resolution)` 단계로 이뤄진다.

<참고 자료>

자바 알고리즘 인터뷰 with 코틀린

1. 제네릭: 안전한 코드 작성하기

컴파일 타임(Compile Time)에 클래스나 메서드에 사용할 자료형을 지정하여 타입 검사에 도움을 받는다.

2. 함수형 프로그래밍 언어

  • 람다 표현식
  • 스트림 API

Java 8 이전에는 객체 지향 외에 절차 지향, 함수형 프로그래밍 개념을 배척하다 싶은 행보를 보냈다. OOP를 코딩 테스트에서 활용하기란 어렵다. 하지만 함수형은 코딩 테스트에 매우 유용하다.

마치며

'왜 성장해야 하는가'는 개발을 다시 시작할 때부터 가슴속에 품던 질문이다. 표현하고 싶다는 생각을 했는데 기회를 얻었다.

@장태근
개발자. 명료한 생각이 명료한 글이 된다.