객체지향이란?
1. 객체지향의 등장
1970년대 들어 처음 용어가 나왔으며 오늘날 50년이 넘는 역사를 갖고 있다.
이전에는 C언어같은 "절차지향 언어"가 주를 이루었음
절차지향언어
- 실행하고자 하는 순서대로 명령어를 입력해서 실행되는 방법으로 코딩하는 언어들
- 컴퓨터의 발전과 프로그램 복잡도가 증가하며 유지보수, 개발기간 등 다양한 부분에서 비효율 발생
객체지향언어
- 추상화, 상속, 은닉, 재사용, 인터페이스 등이 특징
- 현실에 존재하는 사물을 있는 그대로 모델링하여 행위와 속성을 정의
- 절차적이 아닌 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계하기 시작
- 사물에 대해서는 객체 Object라고 부르고, 해당 사물의 행위를 Method로, 해당 사물이 가지는 속성을 변수 Variable라고 정의
- 실제 사물을 중심으로 설계하기 때문에 기존의 절차지향보다는 조금 더 편리하게 설계가 가능
자바 Java
- 대표적인 객체지향언어 중 하나
- 1995년 Sun Microsystems이라는 회사에서 출시, 현재는 오라클에서 서비스 중
- C++과 유사한 언어의 구문을 채택했으나 C++이 갖고 있는 복잡한 개발 방식은 사용하지 않음
- 시스템 레벨 접근, 메모리 직접 할당 및 해제, 포인터 등
- 어떠한 운영체제에서도 자바 가상 머신만 있으면 독립적으로 실행될 수 있도록 설계
- 여러 플랫폼에서 호환성을 제공하는 장점
2. 객체 설계하기
객체는 사물이고 사물은 Object. 우리는 이를 클래스(Class)에 정의한다
객체 == 사물 == Object | |||||
자동차 | 계정 | 계좌 | |||
![]() |
![]() |
![]() |
|||
속성 Variable |
행위 Method |
속성 Variable |
행위 Method |
속성 Variable |
행위 Method |
자동차 이름 | 주행 거리 | 아이디 | 계정 등록 | 계좌번호 | 잔고 계산 |
자동차 번호 | 연비 계산 | 패스워드 | 계정 삭제 | 잔고 | 이율 계산 |
등록년월 | 번호 교체 | 이메일 | 비밀번호 변경 | 예치금 | 입금 기록 |
모델명 | 등록증 갱신 | 전화번호 | 이메일 변경 | 이율 | 출금 기록 |
객체의 3가지 요소
상태 유지 (객체의 상태)
- 객체는 상태 정보를 저장하고, 유지되어져야 하며 이러한 속성은 변수로 정의되어져야 한다
- 속성값이 바뀜에 따라 객체의 상태가 변경될 수 있어야 한다
기능 제공 (객체의 책임)
- 객체는 기능을 제공해야 하고, 이 부분은 Method의 제공으로 이루어진다
- 캡슐화와 연관
- 외부로부터 직접 속성에 접근하여 변경하면 안된다
- 객체가 제공하는 Method로 기능이 제공되어져야 한다
고유 식별자 제공 (객체의 유일성)
- 각각의 객체는 고유한 식별자를 가져야 한다
- 예를 들어 카드번호, 계좌번호, 자동차 번호 등과 같은 속성을 통해 각각 고유한 값을 줄 수 있다
- 이는 이후 DB에서 Unique Key 또는 Primary key로도 작성이 가능
3. 물리 객체와 개념 객체
물리 객체
- 물리적 객체는 실제로 사물이 존재하며, 이를 클래스로 정의한 객체를 의미
- 예시
- 자동차 렌탈 시스템 : 자동차, 고객, 직원, 사업장, 정비소 등
- 급여 관리 시스템 : 직원, 월급 통장 등
- PC방 관리 시스템 : PC, 직원, 공간, 책상, 의자 등
개념 객체
- 개발할 웹 시스템에서 Service에 해당되며, 이는 비즈니스 로직을 처리하는 부분을 의미
- 비즈니스 로직에서는 여러 객체를 서로 상호작용하도록 하며, 객체가 제공하는 오퍼레이션 method를 통해 객체의 속성을 변경
- 예시
- 사용자 관리 시스템
- 사용자 객체의 마지막 접속일자를 이용하여 계정만료, 비밀번호 초기화, 재등록 처리 등
- ATM 시스템
- 사용자(Object)의 Action에 따라, 계좌(Object) 잔고의 속성을 변경하는 입금/출금 Logic 처리
객체지향에서의 대부분의 코딩은 각 객체의 기능을 정의하고 business logic을 처리하는 Service에서
객체의 Method를 활용하여 여러 조건을 확인, 객체의 속성을 변경하는 작업이 주된 코딩
각 객체의 속성을 변경하거나 상태를 변경할 수 있는 오퍼레이션(Method)을 잘 정의해야 한다