본문 바로가기

Java/Spring

[SPRING]스프링 입문을 위한 자바 객체 지향의 원리와 이해(1)

 

책을 시작하자마자 작가가 의문을 던진다.

 

스프링을 이해하려면 이전의 어떤 기술을 이해하고 있어야 하는가?

나는 당연하게 OOP라고 생각했다.

하지만 작가는 다양한 답변을 내놓았고 그중 물론 OOP라는 답변이 있었다.

 

작가가 원했던 답변은 아래와 같다.

  1. SOA
  2. CBE
  3. OOP
  4. 절차적/구조적 프로그래밍
  5. 기계어/어셈블리어

5 로 갈수록 작가의 만점과 가까워지는 것 같은데 나는 아쉽게도 OOP만 생각해냈다.


그다음 장으로 넘어가서 작가는 T 메모리 구조를 보여주면서 static, stack, heap 영역들의 역할과 구조 등을 알려 주었는데 정리를 하자면 아래와 같다.

스태틱 영역
스택 영역(메서드들의 놀이터) 힙 영역
스레드 스레트
  • 스태틱 = 클래스의 놀이터
  • 스택 = 메스드의 놀이터
  • 힙 = 객체의 놀이터

위의 내용을 예제를 곁들이면서 설명을 해주었는데, 위의 그림만 이해하고 있으면 될 것 같다.

 

그리고 객체 지향의 4대 특성을 유명한 캡! 상추다로 간단하게 요약해놓았다.

여기서 상속은 다른 용어로 바꿔서 다시 설명을 해준다.

  • 캡 = 캡슐화(Encapsulation) / 정보은닉(Information Hiding)
  • 상 = 상속(Inheritance) / 재사용
  • 추 = 추상화(Abstraction) / 모델링
  • 다 = 다형성(Polymorphism) / 사용 편의

그리고 유명한 붕어빵 틀과 붕어빵에 대해 설명을 해주었다.

그전에 다음의 문제들의 답변을 생각해보자

  • 사람은 클래스인가? 객체인가?
  • 김연아는 클래스인가? 객체인가?
  • 뽀로로는 클래스인가? 객체인가?
  • 펭귄은 클래스인가? 객체인가?

바로 클래스는 분류에 대한 개념이지 실체가 아니라는 말과 객체는 실체라는 말이다.

클래스 : 객체 = 펭귄 : 뽀로로 = 사람 : 김연아라고 이해를 하면 될 것 같다.

 


그리고 다음 장으로 가면 "상속"이라는 말 때문에 객체 지향을 오해하는 경향이 있다고 했다.

여기서 나도 생각이 든 게 보통 상속이라고 하면 부모 - 자식 간의 관계라 설명을 하곤 했었는데,

객체지향의 클래스는 상속이라기보다 "분류"의 개념이라고 봐야 한다는 것이다.

슈퍼 클래스 서브 클래스
상위 계층 하위 계층

그래서 상위 계층과 하위 계층 또는 슈퍼 클래스와 서브 클래스로 명칭을 정하면 좋겠다는 말을 전달해주었다.

추가로 우리는 상속을 is-a 관계라고 알고 있지만 사실 "is a kind of"라는 말이다.

그래서 생각한게 좀 더 폭 넓게 상속을 생각하며 들어가면 좋다는 걸 깨닫게 되었다.