본문 바로가기
SPRING

[파트 1. 스프링 입문] 챕터 1. 객체지향 정의

by ZZON90 2022. 2. 24.

 오늘은 객체지향의 정의에 대해 포스팅합니다.

 

 포스팅에 앞서 스프링 프레임워크는 JVM(Java Virtual Machine)에서 작동하며, 아파치 라이선스 2.0을 따르는 오픈소스 프레임워크입니다. 즉, 스프링 프레임워크를 배우기 위해서는 Java 언어에 대한 선행학습이 필요합니다. Java 언어에 대한 기본적인 강의는 책을 사서 공부하거나 무료 강의가 많습니다. Java언어 공부를 먼저 하시고 본 포스팅을 읽어주시기 바랍니다.

 

 

1. 객체지향의 등장

 객체지향의 개념은 1970년대에 들어 용어가 나왔습니다. 객체지향 이전에는 절차 지향이 주를 이뤘으며, 이러한 방법으로 코딩하는 언어를 절차 지향 언어라고 합니다. 절차 지향 언어에는 대표적으로 C언어가 있습니다. 절차 지향이 주를 이룰 때는 프로그램 단위가 크지 않아, 간단한 로직을 순차적으로 처리하여 결과를 얻는데 그쳤습니다. 점점 컴퓨터의 발전함에 따라 프로그램 복잡도가 증가하면서 이에 투입되는 유지보수, 개발기간 등 여러 부분에서 비효율이 발생했습니다.

 이런 어려움을 해결하기 위해 효과적인 개발방식을 선택하게 되었고 객체지향의 특성인 추상화, 상속, 은닉, 인터페이스, 재사용 등 여러 곳에서 객체지향 개발을 시작하게 되었습니다.

 

 기존 절차 지향의 함수의 활용해서 프로그램을 개발할 수도 있으나, 새로운 시각으로 개발방식을 바라보게 되었습니다. 객체지향은 현실에 존재하는 사물을 모델링하여 이들의 행위와 속성을 정의합니다. 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계됩니다.

 사물에 대해서는 객체(Object)라고 부릅니다. 사물이 가지는 속성은 변수(Variable)이라고 정의합니다. 사물이 동작하는 행위는 Method로 정의합니다.

 

 Java는 이러한 객체지향을 기반으로 한 언어이며 운영체제에 관계없이 JVM(Java Virtual Machine)만 있으면, 독립적으로 실행될 수 있도록 설계되어 있어 여러 플랫폼에서 호환성을 제공하는 장점을 가지고 있습니다. 앞으로 스프링 프레임워크를 공부하기 위해서는 Java를 알고 이해해야 합니다.

 

 

 

2. 객체 설계

 객체는 사물을 의미하고 객체지향에서 객체는 Object를 의미합니다. 객체는 이 세상에 존재하는 모든 사물을 객체화할 수 있습니다.

 

속성

 속성은 객체가 가지고 있는 정보를 의미합니다. 특정 사람을 지칭할 때 이름과 키, 몸무게로 알 수 있듯이 객체의 속성을 통해 객체가 무엇인 지 알 수 있어야 합니다. 실생활에서 많이 사용하는 휴대전화를 예로 들면 이해하기 쉽습니다.

  • 모델명
  • 전화번호
  • 크기
  • 무게
  • 통신사

 

행위

 행위는 객체가 수행할 수 있는 행동을 의미합니다. 사람이 이름이라는 속성이 있을 때 이름을 말하는 것이 행위가 됩니다. 휴대전화의 행위를 뽑아보면 다음과 같습니다.

  • 통화
  • 촬영
  • 게임
  • 동영상 시청

 

객체의 3가지 요소

 객체는 속성과 행위를 바탕으로 3가지 요소를 갖추어야 완전한 객체라고 할 수 있습니다. 3가지 요소를 갖추지 못하면 불완전 객체라고 말합니다.

상태 유지

 객체는 상태 정보를 저장하고 유지해야 합니다. 속성은 변수(Variable)로 정의되어야 합니다. 속성이 바뀌면 객체의 상태가 바뀌어야 합니다.

기능 제공

 객체는 기능을 제공해야 합니다. 기능은 Method로 이루어집니다. 이 부분은 캡슐화와 연관이 있고 외부에서 속성에 직접 접근해 변경하지 않고 객체가 제공하는 Method를 통해 속성을 변경해야 합니다.

고유식별자 제공

 각각의 객체는 고유한 식별자를 가져야 합니다. 모든 사람이 주민번호를 가진 것처럼, 해당 객체를 특정할 수 있는 속성이 있어야 합니다. 고유식별자는 추후 데이터베이스에서 Unique Key, Primary Key로 작성이 가능합니다.

 

 

 

3. 물리 객체와 개념 객체

객체에는 물리 객체와 개념 객체가 존재합니다.

물리 객체

 물리 객체는 실제로 사물이 존재하며, 이를 클래스로 정의한 객체를 의미합니다. 

은행시스템

  • 계좌
  • 직원
  • 고객
  • 지점

개념 객체

 개념 객체는 실제로 존재하는 객체는 아니지만 프로그래밍할 때 필요한 객체입니다. 즉, 개념으로만 존재하는 객체를 의미합니다. 이후 우리가 개발할 프로그램 또는 시스템에서 Service에 해당하며 Business Logic을 처리하는 부분입니다. Business Logic에서 여러 객체를 상호작용 하도록 하며, 객체가 제공하는 method를 사용하여 객체의 속성을 변경합니다.

은행시스템

  • 고객이 직원에게 업무처리 요청
  • 고객이 계좌에 입금 또는 계좌에서 출금
  • 고객이 지점에 방문

댓글