프로그래머스 백엔드 1기/Java
객체지향 with Java
|테드|
2021. 8. 6. 22:13
1. 객체지향 프로그래밍
- Java는 객체지향 언어
- 등장 배경 : 프로그램의 규모가 커지면서 필요성이 대두됨
- 프로그램의 동작을 쪼개서 객체들이 나눠서 수행함
2. 객체지향의 특성
- 캡슐화
- 기능을 수행하는 단위로 완전함을 갖는다.
- 정보의 은닉이 가능하다. 객체의 정보를 객체 외부에서 접근하지 못 하게 할 수 있다.
- 접근 지정자
- private : 객체 내부에서만 접근 가능
- protected : 상속한 객체에서도 접근 가능
- (friendly) : 같은 패키지 내에서 접근 가능 (기본 지정자이다)
- public : 모두 다 접근 가능
- 상속
- 부모 객체 -> super [추상]
- 자식 객체 -> this [구체]
- 상속은 공통된 기능을 여러 객체에 전달하고 싶을 때 사용하는 것이 아니라, 추상과 구체로 분리하기 위해 사용한다.
- 추상화
// 의미적 추상체
class Login {
void login() {}
}
class KakaoLogin extends Login {
void login() {}
}
// 추상기능을 가진 객체
abstract class Login {
abstract void login();
}
class KakaoLogin extends Login {
void kakao() {}
@Override void login() {}
}
// 객체 자체가 추상적 = interface = 모든 메서드가 추상 메서드이다
interface Login {
void login();
}
class KakaoLogin implements Login {
void kakao() {}
@Override void login() {}
}
- 다형성
- 여러가지의 타입으로 표현할 수 있다.
class KakaoLogin implements Login {
void kakao() {}
@Override void login() {}
}
interface Portal {
void portal();
}
class NaverLogin implements Login, Portal {
void naver() {}
@Override void login() {}
@Override void portal() {}
}
//부모 객체는 자식 객체를 담을 수 있다.
//자식 객체는 부모 객체를 담을 수 없다.
KakaoLogin k = new KakaoLogin();
Login k = new KakaoLogin();
//-----------------------------------
Login login = new Login();
Login login = new KakaoLogin();
Login login = new NaverLogin();
login.login();
Portal potal = new NaverLogin();
potal.portal();
3. 객체를 잘 나누고 연관시키는 방법
- 객체지향 설계를 하는 5가지 원칙
- SOLID
- SRP(Single Responsibility Principle) 단일책임 원칙 : 객체는 하나의 책임만을 가져야 한다.
- OCP(Open Closed Principle) 개방 폐쇄 원칙 : 수정에는 닫히고 확장에는 열어라. 즉 객체를 수정하기 보다는 상속등을 이용하여 기능 추가 등 확장해야 한다.
- LSP(Liskov Substitution Principle) 리스코프 치환 원칙 : 추상성이 높은 객체에 추상성이 낮은 객체를 이용해도 아무 문제가 없어야 한다.
- ISP(Interface Segregation Principle) 인터페이스 분리 원칙 : 객체는 자신이 이용하는 메서드에 의존하지 않아야 한다.
- DIP(Dependency Inversion Principle) 의존 역전 원칙 : 의존 관계를 맺을 때 변하기 쉬운 것 보다 변하기 어려운 것에 의존을 해야한다.
- 디자인 패턴 23가지 : SOLID를 적용하여 자주 쓰이는 패턴들을 정리한 것
[과제] 디자인 패턴
taengsw.tistory.com
728x90
반응형