한 번쯤 소스 코드를 보거나 분석해보라는 글을 본 적이 있었는데,
시작을 자바 System.out.println("Hello World")으로 디버깅 해보라는 말이 있어서 시도해봤습니다.
하나씩 다음 스탭으로 넘어가면서 보고 있는데 꽤 많은 절차가 있길래 보면서 굉장히 놀랐습니다.
부끄럽게도 모든 과정을 이해할 수는 없었지만,
그나마 알 수 있었던 점은 터미널에 문장 한 줄을 띄우려면,
내가 입력한 문장을 버퍼로 만들고 버퍼가 전부 구성되면 그 때 버퍼를 시스템에 flush 한다는 점이었습니다.
print()안에 문자열이 아닌 정수나 float, 오브젝트 등 아무 데이터 타입을 넣어도 에러가 안 뜨는 이유가
당연하게도 이미 데이터 타입마다 오버로딩이 되어 있는 상태였고
변수가 null값이라도 valueOf()을 통해 null인 변수는 "null" 문자열으로 반환하는 식으로 되어 있었습니다.
이 과정에서 한 가지 얻어간 건 String에 대한 이해였습니다.
리터럴로 표현한 String이 원시 데이터 타입이 아니라는 건 책으로 배웠지만 조금 아리송 했었는데,
print를 디버깅하는 과정에서 String도 결국 실제 문장을 담은 byte로 된 배열과 각종 메소드로 이루어진 클래스라는 점을 눈으로 직접 확인해보니 확실히 이해가 되더라고요.
System.out.println("Hello World"); 이 간단한 한 문장도 원래는 데이터 타입을 신경 써야 되고 버퍼로 만들고 해야 하는 것들이,
단 한 줄로 쉽게 만들 수 있다는 점에서 자바 개발하신 분들께 감사한 기분마저 듭니다.
그런데 조금만 더 생각해보니 나는 그저 api 사용자일 뿐인가 하는 좌괴감마저 듭니다..