728x90
1. [객체 지향 프로그래밍이란 프로그램을 객체 단위로 구성하고, 각 객체 간 관계 및 상호작용을 프로그램으로 나타낸 것 이다]
- 장점
- 코드의 재사용성이 높다. - 누군가의 코드를 갖다쓰기도, 상속하기도, 확장하기도 쉽다.
- 유지 보수가 쉽다. - 해당 부분만 수정하면 된다.
- 대형 프로젝트에 적합하다. - 업무 분담이 쉽다.
- 즉, 강한 응집력(단일 책임)과 약한 결합력(약한 의존)을 가진다.
- 단점
- 처리 속도가 느리다. - 객체 간 정보 교환이 모두 메시지 교환을 통해 일어나므로 많은 오버헤드가 발생한다. 하지만 하드웨어의 발전으로 어느 정도 해소된 단점이다.
- 객체가 많으면 용량이 커진다.
- 설계시 많은 노력과 시간이 든다.
2. [객체 지향의 특징 (APIE)- 4가지 ]
- Abstraction(추상화) : 필요한 정보만 표현함으로써 공통 기능을 묶어 이름을 붙임
- Polymorphism(다형성) : 하나의 객체를 여러가지 타입(형)으로 참조 가능
- Inheritance(상속) : 부모 클래스의 자산을 물려받아 자식을 정의함으로 코드의 재사용이 가능함
- Encapsulation(캡슐화) : 데이터를 외부에 직접 노출시키지 않고 메서드를 이용해 보호 가능. 클래스라는 캡슐에 멤버 변수와 메소드를 넣어서 관리하므로 재활용이 원활함.
*다형성 예시 :
▪️ 오버라이딩 : 메소드 이름은 같지만 동작이 다름 .(조상 클래스에 정의된 메서드를 자식 메서드에 적합하게 수정)
▪️ 오버로딩: 메소드 이름은 같지만 매개변수가 다름
구분 오버라이딩 오버 로딩 메소드 이름 동일 동일 매개변수, 타입 다름 동일 반환 타입 상관 없음 동일
*상속 예시:
▪️ Object 클래스는 모든 클래스의 조상 클래스이다.
*캡슐화에서 데이터 보호를 위한 접근 제어자
접근 제어자 클래스 내 패키지 내 다른 패키지의
하위 클래스
(상속 관계 O)패키지 외
(상속 관계 X)private O X X X default O O X X protected O O O X public O O O O
3. [객체 지향의 설계 원칙 (SOLID)- 5가지 ]
- SRP(Single Role Principle, 단일 책임 원칙): 한 클래스는 하나의 책임만 가진다. 기준은 변경으로, 변경시 그 부분 만 변경되도록 설계해야한다.
- OCP(Open Closed Principle,개방 폐쇄 원칙): 확장에는 열려있고 변경에는 닫혀있어야한다. 즉, 클라이언트 코드는 변경없이 추가되거나 확장할 수 있어야한다. 예를 들면, 클라이언트는 구현체를 직접 변경하면 안된다.
- LSP(Liskov Substitution Principle,리스코프 치환 원칙):상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상 작동 해야한다. 즉, 하위 클래스는 상위 클래스의 인터페이스 규약을 다 지켜야한다. 예를 들면, 자동차 엑셀을 밟으면 앞으로 간다. -> 소울의 엑셀을 밟으면 앞으로 간다.
- ISP(Interface Segregation Principle,인터페이스 분리 원칙): 인터페이스는 인터페이스를 사용하는 클라이언트 기준으로 분리해야한다. 즉, 인터페이스 여러개가 하나보다 낫다. 적당히 잘 쪼개야 인터페이스가 명확해지고, 대체 가능성이 높아진다. 예를 들면, 자동차 인터페이스 하나보다는 장비 인터페이스, 운전 인터페이스 이렇게 2개가 더 낫다.
- DIP (Dependency Inversion Principle,의존성의 역전 원칙): 고수준의 모듈은 저수준의 모듈의 구현에 의존해서는 안된다. 즉, 클라이언트 코드는 인터페이스에 의존해야한다. 구현체가 아니라.
728x90
'백앤드 > JAVA' 카테고리의 다른 글
[JAVA] Wrapper Class는 기본 자료형을 객체로 변환한다 (0) | 2024.10.18 |
---|---|
[JAVA] ==는 주소 값, equals는 값 비교 (0) | 2024.10.18 |
[JAVA] String, StringBuilder, StringBuffer 차이 (0) | 2024.10.18 |
[JAVA] 자바는 Call by Value방식이다 (0) | 2024.10.18 |
[JAVA] 컴파일 과정+JVM (2) | 2024.10.18 |