[자바(Java)] 객체 지향 프로그래밍 (OOP_Object Oriented Programming)

방용환·2023년 4월 6일
0
post-thumbnail

1. 객체 지향 프로그래밍 (OOP)

1. 객체 지향 프로그래밍 (OOP)?

  • 객체 지향 프로그래밍(OOP) : 객체를 이용하여 프로그램을 작성하는 방식
  • 현실에 존재하는 대상들을 모델링하여 클래스로 선언
  • 선언된 클래스로 객체를 생성하여 객체의 요소를 사용하여 프로그램을 작성하는 방법

2. 특징

  • 클래스 배포 가능 : 프로그램의 생산성 증가 및 유지보수의 효율성 증가
  • 추상화, 캡슐화, 다형성, 상속성의 특성을 가짐

3. 객체 모델링 (Object Modeling)

  • 객체 모델링 (Object Modeling) : 현실에 존재하는 대상을 속성과 행위로 구분하여 설계
  • 객체 모델링 된 대상을 클래스로 선언 (추상화 - Abstraction)

2. 추상화

1. 단항 연산자란?

  • 피연산자가 1개인 연산자

3. 캡슐화 (Encapsulation)

1. 캡슐화 (Encapsulation)

  • 캡슐화 : 표현대상의 속성(필드)과 행위(메소드)를 하나의 자료형(클래스)으로 선언
  • 클래스를 작성할 때 필드와 메소드에는 접근 지정자를 사용하여 접근 허용 유무를 설정 가능
  • 필드를 은닉화 처리하여 보호하고 메소드를 이용하여 처리되도록 설정
    => Getter 메소드 : 클래스의 외부에서 필드값을 사용할 수 있도록 필드값을 반환하는 메소드
    => Setter 메소드 : 매개변수로 값을 전달받아 매개변수에 저장된 값으로 필드값을 변경하는 메소드
public 반환형 get필드명 () {
	return 필드명;
}

public void set필드명 (자료형 변수명) {
	필드명 = 변수명;
}

2. 캡슐화 사용 이유

  • 문제점 : 객체를 사용하여 필드에 직접적인 접근을 허용하면 필드에 비정상적인 값 저장 가능
  • 해결법 : 클래스의 필드를 은닉화 처리하여 선언
  • 은닉화 선언된 필드에 접근할 경우 에러 발생

3. 접근 제한자 (Access Modifier)

  • 접근 제한자 (Access Modifier) : private, package(dafault), protected, public
  • 클래스, 필드, 생성자, 메소드를 선언할 때 접근 허용을 설정하기 위한 키워드
  1. private : 클래스 내부에서만 접근 가능하도록 허용
    => 클래스, 필드, 생성자, 메소드를 은닉화 처리하기 위해 사용
    => 일반적으로 필드에 사용
  2. public : 모든 패키지의 클래스에서 접근 가능하도록 설정
    => 일반적으로 메서드에 사용
  3. package : 같은 패키지의 클래스에서 접근 가능하도록 설정
    => 클래스, 필드, 메소드 선언시 접근 제한자 키워드를 사용하지 않으면 자동 설정되는 접근 제한자
  4. 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 : 오버라이드 선언된 메소드를 표현하기 위한 어노테이션

0개의 댓글