Chapter 01.객체 지향
1. 객체지향의 등장
객체지향의 개념은 1970년대에 들어서 용어가 나왔으며, 이는 벌써 50년이 넘어가는 역사를 가지고 있습니다.
하지만 이전에는 C언어처럼 실행하고자 하는 순서대로 명령어를 입력해서 실행되는 "절차지향" 이 주를 이뤘으며, 이러한 방법으로 코딩하는 언어들을 "절차지향 언어" 라고 합니다.
이 때에는 프로그램의 단위가 크지 않았으며, 대체적으로 간단한 Logic을 순차적으로 처리하여 결과를 얻는데 그쳤지만, 점점 컴퓨터의 발전과 이로 인하여 프로그램의 복잡도가 증가하면서 이에 들어가는 유지보수, 개발기간 등 다양한 부분에서 비 효율이 발생 하였습니다.
이런 어려움을 해결하기 위해 선택한 방법이 "효과적인 개발방식"을 채택하게 되었고, 이는 이전에 사용하던 흐름에 따른 개발 방식에서 벗어나.
객체지향의 특성인
추상화, 상속, 은닉, 재사용, 인터페이스 등 여러곳에서 객체지향으로 개발을 시작.
함수의 활용으로도 충분히 좋은 프로그램을 개발 할 수 있었으나, 새로운 시각으로 바라보기 시작 하였습니다.
객체지향이란 현실에 존재하는 사물을 있는 그대로 모델링하여, 이들의 행위와 속성을 정의 하고, 절차적이 아닌 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계하기 시작하였습니다.
이는 사물에 대해서는 객체 Object라고 부르며, 해당 사물이 하는 행위를 Method로 정의 하고 해당 사물이 가지는 속성을 변수 Variable라고 정의합니다.
실제 사물을 중심으로 설계를 하기 때문에 기존의 절차지향 보다는 조금 더 편리하게 설계가 가능해졌습니다.
Java는 1995년 Sun Microsystems 작은 언어를 지향하는 객체지향 언어로 Jaa를 소개 하였습니다.
이는 당시에 C++과 유사한 언어의 구문을 채택 하였으나, C++이 가지고 있는, 시스템 레벨 접근, 메모리 직접 할당 및 해제, 포인터 등 복잡한 개발 방식을 사용하지 않았습니다.또한 어떠한 운영체제에서도 자바 가상 머신 만 있으면, 독립적으로 실행 될 수 있도록 설계가 되어 있어서, 여러 플랫폼에서 호환성을 제공하는 장점을 가지고 있습니다.
2. 객체 설계하기
객체 == 사물 == Object
객체의 3가지 요소
- 상태유지 (객체의 상태)
객체는 상태 정보를 저장하고, 유지되어져야 하며 이러한 속성(Variable)은 변수로 정의 되어져야 한다. 이러한 속성값이 바뀜으로 인하여, 객체의 상태가 변경될 수 있어야 한다.
- 기능 제공 (객체의 책임)
객체는 기능을 제공해야 한다. 이 부분은 Method의 제공으로 이루어진다.
이 부분은 캡슐화와 연관이 있으며, 외부로부터 직접 속성에 접근하여 변경하는 것이 아닌 객체가 제공하는 Method로 기능이 제공 되어져야 한다.
- 고유 식별자 제공 (객체의 유일성)
각각의 객체는 고유한 식별자를 가져야 한다.
예를 들면 카드번호, 계좌번호, 자동차 번호와 같은 속성을 통해서 각각 고유한 값을 줄 수 있으며,
이는 이후 Db에서 Unique Key, 또는 Primary key로도 작성이 가능하다.
3. 물리 객체와 개념 객체
물리 객체
물리적 객체는 실제로 사물이 존재하며, 이를 클래스로 정의한 객체를 의미한다.
Ex)
자동차 렌탈 시스템: 자동차, 고객, 직원, 사업장, 정비소 등등
급여 관리 시스템: 직원, 월급통장 등등
PC방 관리 시스템: PC, 직원, 공간, 책상, 의자
개념객체
이후 우리가 개발할 웹 시스템에서 Service에 해당되며, 이는 business logic을 처리하는 부분을 의미 합니다.
Business logic에서는 여러 객체를 서로 상호작용 하도록 하며, 객체가 제공하는 오퍼레이션 method를 통하여 객체의 속성을 변경 시킵니다.
EX)
사용자 관리 시스템
사용자 객체의 마지막 접속일자를 이용하여, 계정만료, 비밀번호 초기화, 재등록 처리 등등
ATM 시스템
사용자(Object)의 Action에 따라, 계좌(Object)의 잔고의 속성을 변경하는, 입금/출금 Logic 처리
객체지향에서의 대부분의 코딩은 각 객체에 기능을 정의하고 이를 business logic을 처리 하는 Service에서 객체의 Method를 활용하여, 여러가지 조건을 확인하여, 객체의 속성을 변경하는 작업이 주된 코딩이 됩니다.
이러한 작업을 하기 위해서는 각 객체의 속성(Variable) 이러한 속성을 변경하거나 상태를 변경할 수 있는 오퍼레이션(Method)를 잘 정의 해야 합니다.
'Be Smart > Spring' 카테고리의 다른 글
Singleton Pattern (0) | 2021.08.20 |
---|---|
디자인 패턴 (0) | 2021.08.19 |
POJO JAVA (0) | 2021.08.19 |
객체지향 설계 5원칙 SOLID (0) | 2021.08.19 |
객체지향의 4대 특성 (0) | 2021.08.19 |
댓글