객체지향 프로그래밍은 상속, 다형성, 추상화, 캡슐화 등 많은 개념을 제공하며 클래스 및 객체를 사용하여 프로그램을 설계하는 방법론이며 패러다임이다.
OOP는 다음과 같은 개념을 제공하여 개발 및 유지보수를 단순화한다.
이러한 개념 외에도 객체지향 설계에 사용되는 몇 가지 용어가 있다.
객체지향 설계를 위한 모델링 기법
하나의 클래스와 상속관계를 통해 상위클래스의 필드(field)와 메서드(method) 획득하여 상위 클래스의 필드, 메서드 재사용
상황에 따라 메서드의 성질을 변화시키는 것
상속 관계에서 동물(부모) → 고양이, 개, 코끼리(자식) 클래스 말하기() 메서드의 메서드 오버라이딩으로 각 객체의 특정에 맞게 구현되어 행동하게 하는 것
객체들이 가진 공통 특성을 파악하고 불필요한 특성을 제거하는 과정으로 단순화하여 세부정보를 숨기고 기능을 표시하는 것
예: TV 리모컨 → 내부처리를 모른다 (추상클래스와 인터페이스)
하나의 문제해결을 위한 데이터와 메서드의 묶음. 내부 정의를 외부에 보이지 않도록 하기 위해 외부 접근을 차단한다.
외부 접근을 차단하여 데이터의 외부 간섭 및 오용으로부터 보호하는데 이를 정보 은닉(information hiding)이라고 한다.
목적은 높은 응집력(High Cohesion)과 약한 결합(Weak Coupling)이다.
OOP는 개발 및 유지 관리를 쉽게 해주는 반면 절차 지향 프로그래밍 언어에서는 프로젝트 크기가 증가함에 따라 코드가 커지면 관리하기가 쉽지 않다.
OOP는 데이터 숨김을 제공하는 반면 프로시저 지향 프로그래밍 언어에서는 전역 데이터에 어디서나 액세스 할 수 있다.
절차보다는 데이터에 중점을 두며, 프로그램을 객체로 나눈다.
소프트웨어 구조 설계에 적용되는 객체 지향 접근 방식으로 이 다섯 가지 원칙은 객체 지향 프로그래밍의 세계를 변화시켰고 소프트웨어 작성 방식도 변화시켰다.
SRP(Single Responsibility Principle): 단일 책임 원칙
OCP(Open Closed Principle): 개방-폐쇄 원칙
LSP(Liscov Substitution Principle): 리스코프 치환 원칙
ISP(Interface Segregation Principle): 인터페이스 분리 원칙
DIP(Dependency Inversion Principle): 의존성 역전 원칙
의존 관계를 구체적인 구현 클래스 대신 추상화된 추상클래스나 인터페이스에 의존해야 하며, 고수준 모듈에서 저수준 모듈에 의존해서는 안 된다.
SOLID 원칙 사용 이유
- 다른 코드 블록에 영향을 주지 않고 코드 블록을 변경할 수 있도록 종속성을 줄일 수 있다.
- 디자인을 더 쉽고 이해하기 쉽게 만들기 위한 원칙이다.
- 이 원칙을 사용하면 시스템을 유지관리, 테스트, 확장 및 재사용할 수 있다.
- 소프트웨어의 bad design을 피할 수 있다.
클래스로 모델링한 객체를 정의한다.
객체는 클래스의 인스턴스(하나의 예)다.
public class Account{
static String bankName; //클래스 변수
long accountNO; //인스턴스 변수
String customerName; //인스턴스 변수
//생성자
Account(){
System.out.println("생성자 실행");
}
//초기화 블럭
{
System.out.println("블록입니다");
}
//메서드
void printInfo(){
System.out.println("계좌 클래스");
}
}
클래스, 변수, 메서드의 선언부에 사용되며 부가적인 의미를 부여한다.
접근 제어자와 그 외 제어자로 나뉘며, 하나의 대상에 여러 개의 제어를 조합해서 사용할 수 있으나 접근 제어자는 단 하나만 사용할 수 있다.
접근 범위는 public > protected >default > private 순
접근 제어자 유형
| 구분 | 같은 클래스 | 같은 패키지 | 상속받은 클래스 | 관계없는 클래스 |
|---|---|---|---|---|
| public | o | o | o | o |
| protected | o | o | o | x |
| default | o | o | x | x |
| package | o | o | x | x |
| private | o | x | x | x |