[스프링 입문을 위한 자바 객체 지향의 원리와 이해] - 2

쓰옹·2023년 3월 27일
0

📙 Java 잡아🤏

목록 보기
24/25

이 포스팅은 김종민, ⌜스프링 입문을 위한 자바 객체 지향의 원리와 이해⌟ 을 읽고 정리했습니다.

객체지향

"우리가 주변에서 사물을 인지하는 방식대로 프로그래밍할 수 있지 않겠는가?"

클래스는 분류에 대한 개념으로 그 실체가 객체다.
객체지향은 객체를 인간의 인지 및 사고방식으로 프로그래밍에 접목하는 방식으로 직관적이고 쉽다.

클래스:객체 = 사람:홍길동 = 분류:실체

객체지향 4대 특성

캡슐화(Encapsulation): 정보 은닉 / 상속: 재사용 / 추상화(Abstraction): 모델링 / 다형성(Polymorphism): 사용 편의
-> 클래스를 통해 구현

추상화: 모델링

추상화는 각 부분의 특징을 가장 잘 표현할 수 있도록 분해/결합하는 것으로 공통특성/공통속성 추출의 의미가 있다.
객체지향의 추상화는 곧 모델링이다.
어플리케이션 경계(Context)에 필요한 특성만 가지고 즉, 목적에 맞게 관심있는 특성만 추출해서 재조합하여 표현하는 것이 추상화고 그게 모델링이다.

  • 클래스와 객체 관계의 자바 표현
    클래스 객체_참조_변수 = new 클래스();

상속: 재사용 + 확장

extends
상속은 상위 클래스의 특성을 하위 클래스에서 상속하고 거기에 더해 필요한 특성을 추가, 즉 확장해서 사용할 수 있다는 의미이다.
부모-자식같은 계층도나 조직도가 아닌 동물-포유류 같은 분류도이다.
상위클래스로 갈수록 추상화, 일반화됐다고 말하며, 하위클래스로 갈수록 구체화, 특수화됐다고 말함.
따라서 '하위클래스는 상위클래스다'가 항상 만족해야한다.

클래스 상속 구조 상 최상위 클래스는 Object이므로 모든 클래스는 Object의 속성을 물려받아 어떤 클래스의 인스턴스이건 toString()같이 Object클래스의 메서드 사용이 가능하다.

정리

  • 객체지향의 상속은
    - 상위클래스의 특성을 재사용
    - 상위클래스의 특성을 확장
    - is a kind of 관계 만족

* 상속과 인터페이스

  • 인터페이스
    implements
    : 구현클래스 is able to 인터페이스
    -> 기능구현을 강제한다.
  • (상속) 상위클래스틑 하위클래스에게 물려줄 특성이 많을수록 좋다 - LSP(리스코프 치환 원칙)
  • 인터페이스는 구현을 강제할 메서드가 적을수록 좋다 - ISP(인터페이스 분할 원칙)

* 상속과 T 메모리

  • 하위클래스의 인스턴스가 힙 영역에 생성될 때 상위클래스의 인스턴스도 함께 생성된다.

다형성: 사용편의성

하나의 타입에 여러 객체를 대입할 수 있는 성질.

  • 오버라이딩(overriding)
    : 상위 클래스의 메서드 재정의 -> 같은 메서드 이름, 같은 매개변수
  • 오버로딩(overloading)
    : 다수의 메서드 중복 정의 -> 같은 메서드 이름, 다른 매개변수(개수 or 타입)

오버라이딩을 통한 메서드 재정의, 오버로딩을 통한 메서드 중복 정의를 통해 다형성을 제공하고 개발자에게 사용편의성을 제공한다.

캡슐화: 정보은닉

접근 제어자를 통해 객체의 속성과 메서드를 감추고, 직접적인 접근을 방지하며 간접적인 접근을 통해 접근할 수 있도록 한다.

  • 접근제어자
    : 접근 권한 지정자를 생략하면 package 권한이 기본값으로 사용된다. => 예전에는 package를 default라고 불렀었음.

    • private: 클래스 외부에서 접근 불가능
    • protected: 상속 관계 서브클래스와 같은 패키지 내의 클래스에서 접근 가능
    • package: 같은 패키지 내에서 접근 가능
    • public: 프로젝트 내부의 모든 클래스에서 접근 가능
  • 상속을 받지 않았다면 객체 멤버는 객체를 생성한 후에 객체 참조 변수를 이용해 접근 가능

  • 정적 멤버는 클래스명.정적멤버 형식으로 권장

profile
기록하자기록해!

0개의 댓글