[TIL] 객체 지향 프로그래밍의 4가지 특징 (24.01.11 - 20일차)

배고픈 배극곰·2024년 1월 11일
0

학습내용

객체지향 프로그래밍?

프로그램을 독립된 단위인 객체들의 모임으로 보고, 각각의 객체는 메시지를 주고 받고 데이터를 처리하는 메커니즘을 가진 프로그래밍이다.

=> 기존 만들었던 코드를 재사용 할 수 있다는 장점.

캡슐화

데이터를 보호하기 위한 OOP의 특성중 하나이다.

  • 정보은닉 : 객체 세부적인 내용이 외부에 드러내지 않는다.
    => 외부에서 데이터 직접접근을 차단한다.

  • 캡슐화 : 필드와 메서드를 하나로 묶는다.

함수를 입력하면 다른 클래스 코드의 잘못된 데이터를 차단할 수 있다.

메서드를 통해 특정 개체에 들어갈 수 있는 것과 없는 것을 검증하는 것

2단계: 비즈니스 로직을 잘 캡슐화해라

// MotorBikeRunner 클래스의 main함수안에 있는 코드
int ducatiSpeed = ducati.getSpeed(); //get ducati speed
ducatiSpeed = ducatiSpeed + 100;        ducati.setSpeed(ducatiSpeed);

이러한 비즈니스 로직또한 객체안에 캡슐화 할 수 있다.

=> MotorBike 클래스 안에 속도를 올리는 메서드를 만들자.

추상화(Abstraction)

공통성과 본질을 모아 추출하는 것으로,

핵심적인 코드만 보여주는 것이다.

목적

  • 클래스 구현 세부사항과 동작을 분리하는 것을 목표로한다.
  • 추상화를 통해 세부적인 내용은 무시한채, 상위 정책을 쉽고 간단한게 표현할수있다.

vs 캡슐화와의 차이점?

추상화는 가장 필요한 데이터를 "보여주는것" 에 초점, 주로 무엇을해야하는지.

캡슐화는 필요한 정보를 위해 코드와 데이터를 "묶는것"에 초점. 그것이 어떻게 이루어져야하는지.

객체 내부상태에 대한 정보를 숨기는 방식
캡슐화는 추상화를 제공하기 위해 사용되는 전략이라 볼 수 있따.

상속 (inheritance)

코드를 재사용하여 기능 및 특성을 자식에게 물려줄수있다.

  • 자식클래스가 부모의 기능 및 특징을 물려받는 특성이다.
  • 중복코드를 줄일 수 있다. => 물려받은 코드를 수정하면 되므로
  • 클래스에 메서드 추가가 어려운 경우 상속을 통해 할 수 있다.
    => 남이 만든 클래스를 가져오는 경우.(수정을 할 수 없으므로.)
    => 클래스가 다양한 곳에서 상속받아 쓰이는 경우.(불필요한 기능이 포함될수 있기때문에)
class Animal {
	private String name;
    public void setName(String name) {
		this.name = name;
    }
    public abstract void hello() {
		System.out.println('hi!');
    }
}

class Bear extends Animal {
	public void hello() {
		System.out.println("growl!");
	}
}

Bear 클래스는 Animal을 상속받아 모든 코드를 물려받았고, 수정하고싶은 hello 메서드만 메서드재정의 하였다.

다형성 (polymorphism)

객체 변경에 용이한 OOP 특성이다

오버로딩

메서드의 이름은 같게하지만 파라미터 개수나, type 을 다르게 하여 서로 다른 메서드로서 동작하게 하는 것.

void howl(String name) {System.out.println(name)}
void howl(String name, int count) {System.out.println(count)}
void howl(String name, double count) {System.out.println(count)}

=> 예시를 잘 못 들었는데 아무튼 대충 이런 형식.

오버라이딩

상속과 연관이 있는 특성이다!

슈퍼클래스(부모)에서 상속받은 메서드를 재정의하는것

조건

  • 슈퍼클래스와 메서드명이 같아야함
  • 매개변수 같아야함
  • return 타입이 같아야함.
  • 접근제한자와 예외는 제한된 조건에서 다르게 선언도 가능하다.

오버로딩 vs 오버라이딩

오버로딩은 기존에 없는 새로운 메서드를 정의하는 것이라면, 오버라이딩은 기존의 메서드(상속받은)의 내용을 재정의하는 것이다.

상속받은 메서드와 다른 파라미터를 가지는 메서드는 "오버로딩" 된것이고,
상속받은 메서드와 같은 파라미터를 가지는 건 "오버라이딩" 되었다 볼수잇다.

profile
마부작침 형설지공

0개의 댓글