코딩 기록들
스프링 입문 1.1 객체지향에 대하여 본문
객체지향의 등장
- 객체지향의 개념 등장 이전 : C언어처럼 실행하고자 하는 순서대로 명령어 입력하여 실행되는 '절차지향' 언어가 주를 이뤘음 : 간단한 로직을 순차적으로 처리하여 결과를 얻었지만, 컴퓨터가 발전하며 프로그램 복잡도가 증가하며 비효율 발생 -> 추상화, 상속, 은닉, 재사용, 인터페이스 등 객체지향으로 개발을 하기 시작함
- 실제 사물을 모델링하여 이들의 '행위', '속성'을 정ㅇ의하고, 객체중심으로 실제 사물이 동작하는 방식으로 설계
- 사물 = 객체 / 사물이 하는 행위 = Method / 사물이 가지는 속성 = 변수
객체 설계하기
- 객체 = 사물 = object
- class 에다가 속성 정의함
- 메소드 : 행위
객체의 3가지 요소
1) 상태유지 : 객체의 상채 - 객체의 상태정보 저장및 유지되어어ㅑ하며 이러한 속성은 '변수'로 정의됨. 속성값이 바뀌며 객체의 상태가 변화함
2) 기능제공 : 객체의 책임
- 속성에 직접 접근하는것이 아님. 객체가 제공하는 메소드로 기능제공 = 캡슐화와연관o
3) 고유식별자 제공 : 객체의 유일성 - 각각의 객체는 고유한 식별자를 가져야 함 ex) z카드번호, 계좌번호, 카드승인내역, 자동차번호 ->db에서 Unique Key, Primary key로 작성가능함
물리객체와 개념객체
1) 물리객체
- 실제로 사물이 존재. 클래스로 정의한 객체를 의미함
2) 개념객체
- 웹시스템에서 service에 해담. business logic을 처리하는 부분을 의미함
- business logic에서는 여러 객체를 서로 상호작용 하도록 하며 객체가 제공하는 오퍼레이션 method를 통해 객체의 속성을 변경시킴 ex) 사용자관리시스템, ATM ㅇ시스템
객체지향에서의 대부분의 코딩 : 객체를 정의하는것 외에도 business logic을 터리하는 'service' 로직을 작성하는것을 많이 함. 메소드및 속성정의할수있는 오퍼레이션(메소드)를 잘 정의 해야함
객체지향의 4가지 핵심요소
1. 캡슐화 : 객체의 속성(variable)을 보호하기 위해 사용
- 캡술화를 위한 메소드 설계 ex) 컴퓨터 전원을 키기위해 외부케이스의 전원버튼통해서 상태속성 on/off 하는것
메소드설계
- 속성이 선언되었으나, 이의 상태를 변경하는 method가없다면 -> 잘못선언된 속성임(단, public 제외)
실물객체가 가진 모든기능 제공해야함 -> 서비스로직에 맞춰 필요한부분만 작성하기도함 - 각각의 메소드는 서로 관련(연관)성 있어야함 ex) 차량의 렌탈/반납. 등록/해지 등 속성의 상대되는 기능을 제공해야 함
- 객체안의 메소드는 객체안의, 자신의 속성을 처리해야함. 다른객체 전달받아 속성 직접 처리하면 안됨(다른객체의 값을 받야아할땐, 해당객체의 속성을 get()등으로 값을 가져와서 값 자체를 전달할수있는 형태로 메소드 작성해야함)
- Getter / Setter Method : 외부에서 속성에 직접접근하는것이 아닌, 게터/세터 메소드통해서 접근하도록 적용
- CRUD method : 데이터처리위한 기본적인 메소드 제공
- Business Logic Method
- 객체 생명 주기 처리 Method : ex) destroy(), disconnect(), quit() 등 소멸 메소드
- 객체 영구성 관리 method : 외부에서 접근 불가능하도록 private로 선언
장점
- 추상화 제공 : 실제 메소드가 어떻게 동작하는지 외부에서 이해할필요가 없으며, 이를 단순호출만으로 해당기능 실행할수 있고, 이를통해 객체단위 프로그램 설계가 가능함
- 재사용성 향상 : 한객체의 속성및 메소드는 모두 캡슐화의 형태로 제공됨 -> 재사용성 향상 -> 유지보수 효율성 향상
- 무결성 : 변수는 private. 메소드는 public으로 선언 : 객체의 무결성을 위함 -> getter / setter 제외한 public method는 입력된 매개변수를 validation한 후 실행하는것을 기본으로 함
2. 상속 : 속성의 상속이 아닌, 하위로 내려갈수록 구체화 되는것
상속의 효과
- 프로그램 구조에 대한 이해도 향상(최상위클래스 구조를 통해 하위클래스들의 동작 이해 가능)
- 재사용성 향상
- 확장성 향상 : 일관된 형태 클래스객체 추가 -> 간단하게 프로그램 확장 가능
- 유지보수성 향상
3. 다형성
- 하나의 개체가 여러개의 형태로 변화하는것
- 오버라이딩을 통해 가능
4. 추상화
- 객체지향에서의 추상화 : 모델링
- 구체적으로 공통적인 부분, 특정 특성 분리해서 재조합 하는 부분
- 앞선 다형성, 상속 모두 추상화에 속함
'스프링 입문' 카테고리의 다른 글
스프링 입문 2.2 프록시(Proxy), 데코레이터(Decorator) 패턴 (0) | 2023.12.30 |
---|---|
스프링 입문 2.1 싱글톤(singleton) 패턴 & 어댑터(adapter) 패턴 (1) | 2023.12.26 |
스프링 입문 2. 디자인패턴이란? (2) | 2023.12.26 |
스프링 입문 1.3 POJO JAVA (1) | 2023.12.26 |
스프링 입문 1.2 객체지향 설계 5원칙 (0) | 2023.12.26 |