[Java] 01.자바의 기본적 이해
스태틱, 스택, 힙
이 글은 김종민의 “스프링 입문을 위한 자바 객체 지향의 원리와 이해” 책을 정리하는 글이다. 매우 좋은 책이니 자바 문법 책을 막 뗀 사람은 꼭 읽어보길 바란다. 나는 지금 읽으면서 왜 이런 좋은 책을 이제서야 읽는지 아쉬워하고 있다.
0. _들어가는_말
흔히 자바는 객체지향언어라고 한다. 그러나 그 말 뜻을 이해하는 사람은 얼마나 될까? 많이 있다고 해도, 막 자바를 배운 사람에게 객체 지향이라는 말이 와닿지는 않을 것 이다. 특히 나는 클래스와 객체를 붕어빵틀과 붕어빵으로 비유한 설명을 읽었을때 틀린 말은 아니지만 분명 더 좋은 설명 방법일 있을텐데 딱 맞는 얘기가 아니라고 느꼈다. 본인은 문과출신이기 때문에 플라톤의 ‘이데아’ 개념을 가지고 클래스를 이해했다. 그래도 객체를 생성하는 문법을 익히는데 조금 시간이 걸렸다. 그러나 앞서 소개한 책에는 적합한 설명을 하고 있다. 이 포스트에는 그 내용을 정리하고자 한다.
1. _스태틱, 스택, 힙
프로그램이 메모리를 사용할때 코드 실행 영역과 데이터 저장 영역이 나눠진다. 그리고 데이터 저장영역은 스태틱 영역, 스택 영역, 힙 영역으로 나눠진다.
-스태틱 영역: 클래스 영역 -스택 영역: 메서드 영역 -힙 영역: 객체 영역
스태틱은 변하지 않는 것들이 있는 영역이다. 반면 스택과 힙은 수시로 변한다. 변수는 저 세 영역 모두에 존재한다. 스태틱에는 클래스 멤버 변수(스태틱 영역에 있으므로 변하지 않는다!), 스택에는 지역변수, 힙에는 객체 변수가 있다.
2. _클래스와 객체
들어가기 전 말에 써 놨듯, 우리는 익히 클래스와 객체를 설명할때 붕어빵 틀과 붕어빵이라는 비유를 봐왔다. 틀린 말은 아니지만 딱 맞지는 않다. 클래스를 이해하기 위해 추상화를 생각하면 더 좋다. 예를 들어 사람 - 박지성, 김연아/ 동물 - 강아지, 고양이 관계를 생각하면 클래스는 사람, 동물, 객체는 박지성, 김연아, 강아지, 고양이로 생각할 수 있다. 그러면 사람 박지성 = new 사람 이라는 객체 생성 문법이 쉽게 이해가 갈 것이다.
3. _상속
상속이라는 번역이 큰 오해를 불러 일으켰다. 상위/하위 클래스, 슈퍼/서브 클래스 표현 등 있지만 부모/자식클래스 표현이 많이 쓰인다. 흔시 상속을 자식 클래스는 부모 클래스를 물러받는다고 표현한다. 그러나 상속 관계에서 반드시 만족시켜야하는 문장에 대입하면 이 표현이 좋지 못한 표현임을 알 수 있다.
- 하위 클래스는 상위 클래스이다.
여기에 자식 클래스와 부모 클래스를 그대로 대입하여 표현하면 자식은 부모이다? 이상한 말이 나온다. 그러나 상속은 분류도로 이해하면 매끄러운 말이 나온다. 척추동물-포유류-강아지를 예를 들면, ‘강아지는 포유류이다’ 말이 된다.
따라서 상속은 분류로 이해하고 이를 직관적으로 알 수 있게 이름을 잘 지어야 한다.