1. 객체 지향 프로그래밍 (OOP)
1. 객체 지향 프로그래밍 (OOP)?
- 객체 지향 프로그래밍(OOP) : 객체를 이용하여 프로그램을 작성하는 방식
- 현실에 존재하는 대상들을 모델링하여 클래스로 선언
- 선언된 클래스로 객체를 생성하여 객체의 요소를 사용하여 프로그램을 작성하는 방법
2. 특징
- 클래스 배포 가능 : 프로그램의 생산성 증가 및 유지보수의 효율성 증가
- 추상화, 캡슐화, 다형성, 상속성의 특성을 가짐
3. 객체 모델링 (Object Modeling)
- 객체 모델링 (Object Modeling) : 현실에 존재하는 대상을 속성과 행위로 구분하여 설계
- 객체 모델링 된 대상을 클래스로 선언 (추상화 - Abstraction)
2. 추상화
1. 단항 연산자란?
3. 캡슐화 (Encapsulation)
1. 캡슐화 (Encapsulation)
- 캡슐화 : 표현대상의 속성(필드)과 행위(메소드)를 하나의 자료형(클래스)으로 선언
- 클래스를 작성할 때 필드와 메소드에는 접근 지정자를 사용하여 접근 허용 유무를 설정 가능
- 필드를 은닉화 처리하여 보호하고 메소드를 이용하여 처리되도록 설정
=> Getter 메소드 : 클래스의 외부에서 필드값을 사용할 수 있도록 필드값을 반환하는 메소드
=> Setter 메소드 : 매개변수로 값을 전달받아 매개변수에 저장된 값으로 필드값을 변경하는 메소드
public 반환형 get필드명 () {
return 필드명;
}
public void set필드명 (자료형 변수명) {
필드명 = 변수명;
}
2. 캡슐화 사용 이유
- 문제점 : 객체를 사용하여 필드에 직접적인 접근을 허용하면 필드에 비정상적인 값 저장 가능
- 해결법 : 클래스의 필드를 은닉화 처리하여 선언
- 은닉화 선언된 필드에 접근할 경우 에러 발생
3. 접근 제한자 (Access Modifier)
- 접근 제한자 (Access Modifier) : private, package(dafault), protected, public
- 클래스, 필드, 생성자, 메소드를 선언할 때 접근 허용을 설정하기 위한 키워드
- private : 클래스 내부에서만 접근 가능하도록 허용
=> 클래스, 필드, 생성자, 메소드를 은닉화 처리하기 위해 사용
=> 일반적으로 필드에 사용
- public : 모든 패키지의 클래스에서 접근 가능하도록 설정
=> 일반적으로 메서드에 사용
- package : 같은 패키지의 클래스에서 접근 가능하도록 설정
=> 클래스, 필드, 메소드 선언시 접근 제한자 키워드를 사용하지 않으면 자동 설정되는 접근 제한자
- protected : 같은 패키지의 클래스에서 접근 가능하도록 설정
=> 다른 패키지의 클래스에서 protected 접근 제한자의 필드 또는 메소드의 클래스를 상속을 받은 경우 접근 가능
4. 다형성 (Polymorphism)
1. 메소드 오버로드 (Overload)
- 메소드 오버로드 : 오버로드 선언된 메소드는 매개변수에 전달되는 값에 따라 메소드를 선택하여 호출
- 메소드 오버로드에 의한 다형성
public void display(int param) {
System.out.println("정수값 = " + param);
}
public void display(boolean param) {
System.out.println("논리값 = " + param);
}
public void display(String param) {
System.out.println("문자열 = " + param);
}
2. 다형성 (Polymorphism)
- 다형성 : 같은 이름의 메소드를 호출할 경우 상태에 따라 메소드를 선택 호출
- 메소드 오버로드 (Overload)
5. 상속성
1. UML (Unified Modeling Language)
- UML (Unified Modeling Language) : 클래스와 클래스의 관계를 UML을 사용하여 클래스 다이어그램(Class Diagram)으로 표현
2. 일반화 관계 (Generalization)
- 상속 관계 : X is a Y
- 클래스를 선언할 때 기존 클래스를 상속받아 작성
- ex) 사원 클래스와 관리자 클래스 -> 관리자는 사원이다. (O) / 사원은 관리자다. (X)
3. 실체화 관계 (Realization)
- 상속 관계 : X is a Y
- 클래스를 선언할 때 기존 인터페이스를 상속받아 작성
- 인터페이스 : 현실에 존재하는 대상을 보다 추상적으로 표현하기 위한 자료형
4. 연관 관계 (Association)
- 포함 관계 : X has a Y
- 직접 연관 관계 (Direct Association) : 한 방향으로만 도구로써 기능을 제공하는 관계
- ex) 컴퓨터 << CPU + MainBoard + Memory
5. 집합 연관 관계 (Aggregation)
- 포함 관계 : X has a Y
- 집합 연관 관계 (Aggregation) : 포함 관계로 설정된 객체들의 생명주기가 다른 포함 관계
- ex) 컴퓨터 << 프린터
6. 복합 연관 관계 (Composition)
- 포함 관계 : X has a Y
- 집합 연관 관계 (Aggregation) : 포함 관계로 설정된 객체들의 생명주기가 같은 포함 관계
- ex) 게임 << 캐릭터
7. 의존 관계 (Dependency)
- 포함 관계 : X has a Y
- 의존 관계 (Dependency) : 포함 관계로 설정된 객체가 변경돼도 다른 객체에 영향을 주지 않는 포함 관계
- ex) TV << 리모컨
8. 메소드 오버라이딩 (Overriding)
- @Override : 오버라이드 선언된 메소드를 표현하기 위한 어노테이션