1 분 소요

처음 써보는 기술블로그이자 첫 번째 포스트…!!
두서없이 막 쓸 것 같다.

OOP is A PIE - 객체지향의 특징 4가지

추상화(Abstraction)
다형성(Polymorphism)
상속(Inheritance)
캡슐화(Encapsulation)

1. 추상화(Abstraction)

현실의 객체가 갖는 속성과 기능은 추상화 되어 클래스에 정의된다.
클래스는 구체화되어 프로그램의 객체가 된다.

2. 다형성(Polymorphism)

  • 항상 헷갈리는 오버로딩(overloading)오버라이딩(overriding).

    오버로딩은 과적재. 한 클래스 내에서 이름은 같지만 다르게 동작하는 메서드를 여러개 작성하는 것.

    오버라이딩은 over-writting. 부모클래스의 메서드를 자식 클래스에서 동일한 이름으로
    자신의 특징에 맞게 재작성하는 것.

    • 오버라이딩한 자식의 접근 제한자는 부모보다 같거나 더 넓어야 한다.

      static: 정적인 != 고정된
      ⇒ 바뀔수는 있지만 거의 안바뀌는(ex: 학명)

      멤버 변수 중 static이 붙는 클래스 멤버는 객체와 무관하며
      클래스 로딩 시 클래스 영역에 메모리가 할당된다.

    • 모든 클래스에는 Object 클래스에 정의된 메서드가 있다.
    • 메서드가 오버라이드 된 경우, 무조건 자식 클래스의 메서드가 호출된다.


  • 부모 객체는 자식을 담을 수는 있지만(메모리에 있음) 자식의 내용에 접근할 수 없다.
    이 때 필요한게 참조형 객체의 형 변환(캐스팅).

    묵시적 캐스팅은 자손 타입의 객체를 조상 타입으로 참조하는 것으로, 형변환 생략이 가능하다.

    명시적 캐스팅은 조상 타입을 자손 타입으로 참조하는 것으로, 형변환 생략이 불가능하고 명시적 캐스팅 이후에는 자식의 내용에 접근할 수 있다.


  • 다형성을 사용하는 이유 : 관리는 편리하게, 기능은 원하는대로!

    Person 클래스 하나로 스파이더맨, 배트맨, 슈퍼맨, 일반인, 직장인.. 등등을 한번에 관리할 수 있다.

3. 상속(Inheritance)

부모 클래스와 자식 클래스 간에 is a 관계가 성립될 때 구현한다.
딱히 쓸게 없네

4. 캡슐화(Encapsulation)

Singleton 디자인 패턴

객체의 인스턴스가 오직 1개만 생성되는 패턴(객체의 생성을 제한한다).

아직 singleton 패턴을 사용해보지 않아서 이후에 추가 작성하겠다.

객체가 여러개 만들어질 필요가 없거나 1개만 만들어져야 할 경우, 싱글톤 디자인 패턴을 적용시킨다.

방법은 여러가지가 있다고 하지만 내가 배운건 가장 간단한 방법.
아래의 예시를 살펴보자.

private static BookManagerImpl bookManager = new BookManagerImpl();

private BookManagerImpl() {

}

public static BookManagerImpl getBookManager() {
    return bookManager;
}

기본생성자의 접근제어자를 private으로 설정해 외부에서 BookManagerImpl 객체를 생성하지 못하게 하고, getBookManager 메서드(getter)를 통해 private 변수인 bookManager를 호출하도록 하는 것.
이 때, 객체 없이 외부에서 접근할 수 있도록 변수와 getter에 static을 붙인다.






참고 : velog.io/@sungsuzi/oop의-4가지-특징

태그: ,

카테고리:

업데이트: