객체 지향 - 4대 원칙

namkun·2022년 2월 2일
0

Spring

목록 보기
1/18

갑자기 왜 객체지향의 4대 원칙을 정리하냐 함은... 매번 기억이 잘 안남기에 다시 공부하고 이에 대해 정리를 해보기 위함이다.

해당 내용은 '스프링 입문을 위한 자바 객체 지향의 원리와 이해'와 인프런 김영한님의 '스프링 핵심 원리 - 기본편' 강의를 참고하였습니다.


객체와 클래스

객체는 단순하게 이야기하면 이 세상에 존재하는 유일무이한 사물 이라고 할 수 있고

클래스는 분류, 집합, 같은 속성과 기능을 갖는 객체를 총칭하는 개념 이라고 할 수 있다.

어렵다면 요런 비유로 생각해보면 쉽다.

클래스 : 객체 = 사람 : 손흥민 = 포유류 : 고래

세상에 존재하는 유일무이한 객체를 특성에 따라서 분류해보니 객체를 통칭할 수 있는 집합인 클래스가 나왔다.

추상화 = 모델링

'추상' 의 사전적 의미는 다음과 같다.

여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용

그럼 우리가 아는 추상'畫'는 어떤 정의를 가질까?

추상화 (抽象畫)

  • 사물의 사실적 재현이 아니고 순수한 점ㆍ선ㆍ면ㆍ색채에 의한 표현을 목표로 한 그림.

어쨌건, 뭔가 구체적인 것을 분해해서 관찰자가 관심있는 것들만으로 재조합 한다는 것을 알 수 있다.

말을 좀 더 풀어서 이야기 해보자.

추상화라는 것은 구체적인 것을 분해하여, 관심에 있는(필요한) 특성만 갖고 재조합 하는 것이다.

예를 들어보자.

병원 애플리케이션과, 은행 애플리케이션의 '사람' 이라는 클래스는 필요한 부분이 다를 것이다.

병원에서의 사람은 '환자'가 대부분이기에 필요한 정보는 몸무게, 나이, 지병 등의 정보일 것이고

은행에서의 사람은 '고객'이 대부분이기에 필요한 정보는 주로 직업, 연봉이 될 것이다.

같은 사람임에도 필요한 정보만 가져가서 사람이라는 클래스모델링 해야 할 것이다.

모델링은 실제 사물을 정확하게 동일히 복제하는게 아니라 필요한 것만 가져가서 표현한다.

어디서 들어본 말 아니던가?

위에서 말한 것처럼 모델링은 우리가 앞에서 사전 정의한 추상화와 같다!

그럼 이제 우리는 이렇게 말할 수 있다.

추상화의 결과는 클래스이다.

상속

상속...이라고 하면 뭔가를 물려받는게 떠오른다.

그러나 객체지향에서의 상속은 다르다.

객체지향에서의 상속은 상위 클래스의 특성을 재사용 & 확장 하는 것이다.

상속은 조직도나 계층도가 아니라 분류도를 생각하는게 이해하는게 더 빠를 것이다.

그러니 할아버지-아버지-아들 의 개념보다는 동물-포유류-고래 의 개념에 가깝다고 할 수 있다.

뭔가 딱딱하다. 더 쉽게 이야기 해보자.

상속은 하위 클래스 is a kind of 상위 클래스를 만족해야 한다.

아래의 문장은 어색함이 없다.

  • 고래 is a kind of 포유류
  • 포유류 is a kind of 동물

그러나 아래의 문장은 어색하다.

  • 아들 is a kind of 아버지
  • 아버지 is a kind of 할아버지

뭐...여러모로 생각해보면 맞는 이야기일 수 있으나 여러모로 생각하지 않았을 때만 고려하자.

다형성

하나의 객체가 여러가지의 형태를 가질 수 있음을 의미한다.

객체지향에서 다형성은 오버라이딩과 오버로딩 두 가지로 이야기 할 수 있다.

오버라이딩은 상위 클래스의 메서드를 재정의해서 사용한다.

즉, 상위클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트를 갖지만 안의 내용은 재정의 된 것이다.

오버로딩은 같은 함수 이름을 가지나, 다른 인자 리스트를 갖는 것을 말한다. 즉, 같은 메서드가 중복정의 된 것이다.

이를 통해서 우리는 같은 기능의 자료형만 다른 메서드를 서로 다른 이름으로 기억하지 않아도 되고 (오버로딩)

상위 클래스의 정의된 메소드가 하위 클래스에 맞지 않는 경우, 메서드를 수정하지 않고 하위 클래스에 맞게 구현할 수 있다. (오버라이딩)

캡슐화

객체를 하나의 클래스라는 캡슐에 담는 것을 이야기 한다.

이렇게 담긴 캡슐을 통해서 외부에서는 정보를 볼 수 없도록 정보 은닉을 하고,

이렇게 은닉된 정보는 접근지정자를 통해서만 접근할 수 있도록 한다.

자바에서는 다음과 같은 접근 지정자들이 있다.

  • public : 다른 객체에서 해당 객체의 인스턴스를 생성하여 접근 가능.
  • default : 해당 객체를 상속받은 객체 내부에서 접근 가능. 인스턴스 생성으로 접근 불가능
  • protected : 동일한 패키지 내에서만 생성된 객체의 인스턴스를 통해 접근 가능
  • private : 해당 변수가 선언된 내부에서만 사용가능. 외부에서는 어떻게 해도 접근 불가능

이러한 것들을 통해서 정보의 보호 및 사용자에게는 꼭 필요한 데이터만 보여줄 수 있도록 한다.

profile
개발하는 중국학과 사람

0개의 댓글