[자바인강 3주차] 생성자와 메서드를 알아보자
CSS나 자바스크립트 같은 웹 기반 언어를 조금 맛이라도 본 것이, 자바를 더욱 헷갈리게 하는 원인이 될 줄 몰랐다. 웹 기반 언어는 단순하다. 아래 그림처럼 내가 쓰는 그대로 화면에 보인다.
하지만 자바에서는 생성자(constructor)로 내가 쓴 명령문을 적용할 객체를 만든다. 참고했던 다른 자료들에서는 이를 플라톤의 이데아가 현실화되는 것, 과자 틀에서 과자를 찍어내는 것과 같이 이치라고 했다. 그냥 과자를 만들면 될 것을 과자의 이데아를 만들고 과자를 만들어야 하는지에 대해서는 납득하는데 시간이 좀 걸렸다. 물론 그 원리야 과자를 매번 새로 만드는 것보다는 과자 틀을 변형하면 쉽다는 거지만.. 직접 코딩을 하면서 이를 떠올리는 건 다른 문제였다.
자바의 언어의 특징에 대한 구조적인 이해가 필요한 시점이었고, 생성자가 왜 필요한 지부터 시작하여 어디에 입력해야 하는지에 대한 전반적인 의문을 풀기 위한 추가 검색 및 공부가 이어졌다. 다행히 얼마 전 텀블벅에서 펀딩한 <쉽게 코딩하는 방법: 위캔코딩>에서 자바에 대한 이해를 돕는 자료를 발견했다.
생성자의 발생 맥락을 이해하려면, 클래스를 봐야 한다. 생성자와 클래스는 꼭 같이 움직이며, 클래스는 생성자로 완성된다. (클래스에는 반드시 하나 이상의 생성자가 필요한데, 많은 생성자를 작성하지 않는다면 컴파일러가 자동으로 생성자 코드를 넣어준다고 한다.) 이를테면 생성자는 클래스를 작동하기 위한 '스위치' 역할을 하는 것이다. 클래스는 플라톤의 이데아이자 과자 틀이라면, 생성자는 이런 과자 틀에 과자를 찍어내라는 명령문인 셈이다. 그래선지 생성자 코드는 마치 동어 반복처럼 보인다. (아래 코드의 뜻은 Animal이라는 클래스에 cat이라는 새로운 객체를 만들라는 뜻이다.)
그리고 자바 코딩에서 주의해야 할 점은 이 생성자가 대개 메서드 부문 위에 적힌다는 것이다! 내 식대로 이해하자면, 모든 속성과 기능을 적어두고 생성자를 불러야 완성!일 것 같은데 위 그림처럼 생성자는 객체 변수가 나열된 이후에 보통 적는다. 이런 구조가 왜 생겼는지 나름 유추하자면, 자바가 자료가 들어갈 상자를 중시하는 언어라는 특색에서 기인하는 것 같다. 생성자는 뒤에 적힐 메서드가 들어갈 자리를 표시해주는 것이다. 이게 또 왜 중요한가? 자바 언어의 데이터 위치는 크게 아래와 같이 나뉜다.
자세한 내용이야 모르지만, 힙 메모리와 스택 메모리는 데이터의 효율적인 관리를 위해 그 성격상 분리되어 있고 자바가 어떤 기능을 사용하느냐에 따라 데이터는 위 2군데에 나뉘어 저장된다. 컴퓨터 구조와 자바 언어는 밀접하게 연관되어 있는 셈이며, 자바를 잘 다루기 위해서는 컴퓨터 구조와 작동 방식을 먼저 이해해야 하겠다는 생각이 들었다. (하지만 이는 우리 강의에서 다루지 않는 관계로.. 나중에.. )
이 공부가 어려운 또 다른 점은, 이 모든 구조를 이해하기 위해 결국 '전반적으로' 훑어보는 시간이 필요하단 점이다. 단순히 생성자의 정의만 보고서는 이게 왜 필요한지 이해하는 것이 어려웠다. 클래스의 맥락을 봐야 하고, 또 이것이 어떻게 쓰였는지 봐야 조금 알 것 같은 느낌이 온다. 왜 여기 적힌 속성은 다른 클래스의 메서드에서 나오는 걸까 같은 예제는 결국 그 구문들이 어떻게 서로 연결되는지 파악해야만 납득이 된다.
여하튼 2~3주차는 생성자를 왜, 어디에 적어야 하는지 헤매며 보낸 것 같다. 그리고 이 궁금증을 해결하기 위해서는 컴퓨터의 구조를 (언젠가 제대로) 들여야 봐야 한다는 무거운 결론에까지 이르렀다. 뭔가 알듯 말듯한 느낌으로 계속 강의를 듣는 것이 덜 닦고 화장실을 나온 것처럼 찝찝하지만, 보다 보면 알아지겠지 하는 마음으로 오늘도 나아가 본다.
#패스트캠퍼스 #내일배움카드 #국비지원 #K디지털기초역량훈련 #바이트디그리 #자바인강