[TIL] W1D2

stella·2021년 8월 8일
0

[DAY2]

객체지향 프로그래밍

  • 큰 프로그램을 작게 나눠서 만들고 합치는 방식

  • 동작들을 객체들에게 나눠서 수행하게 함

  • 객체와 객체는 서로 협력관계

  • 객체를 형으로 구분하여 표현

객체지향의 특성

(1) 캡슐화

  • 완성도가 있다.-> 기능을 수행하는 단위, 완전함을 갖는다.

  • 정보가 은닉되어 있다. -> 객체의 정보가 밖에서 접근하거나, 밖에서 객체 내의 정보에 접근하지 못하게 한다

객체는 스스로 동작할 수 있는 환경을 가지고 있어야함(외부에 의존, 침략을 제한해야함)

  • 접근제한자:

    • private: 외부에서 쉽게 객체에 접근하는 것을 방지(객체만 소유)
    • protected: 상속된 객체에서 접근 가능(상속 관계에서만 적용)
    • friendly: 같은 패키지 내에서 접근 가능(클래스 선언도 가능)
    • public: 모두 다 접근 가능

접근제한자의 범위가 항상 헷갈렸었었다.. 복습해서 잘알아둬야겠다...

(2) 상속

[추상객체] 상위 부모 super
[구체객체] 하위, 자식,this

내가 예전에 생각했던 상속
공통된 기능을 여러 객체들한테 전달 하고 싶을때 사용한다고 생각

  • 기준이 명확하고 포함(?)관계가 있을때

  • 추상체와 구상체로 구분이 되는것

  • ex) 원자> 물질> 동물> 포유류 > 사람 > 남자 > 짱구

(3) 추상화

  • 추상화된 객체: 추상체
  • 구체화된 객체: 구상체

=>위로 올라갈 수록 추상화 되며 상대적 개념이다

  • 의미적 추상체 (의미로만 묶어둔 형태)
class Logout{
void logout();
}
  • 추상기능을 가진 객체
    -->abstact 클래스 안에 abstact 메소드를 만들어 동작
  • 객체 자체가 추상적
interface Logout{
abstract void logout();
}

(4) 다형성

  • 형이 많다

  • 형에 따라 구현해야할 메소드가 다름

  • 다른 객체지만 형이 같기 때문에 Animal에 구현되어 있는 메소드만 사용할 수 있다.

Animal a= new Animal();
Animal c= new Cat();

=>같은 객체일지라도 접근하는 형에 따라 접근 할 수 있는 권한을 가진 것만 접근 할 수 있다.

이 부분도 자바 배울때 헷갈려서 그냥 무조건 형과 객체를 같은 것으로 했었다... 다시 알아두기...

객체지향 설계

  • 기능을 객체에 나누어 수행시킴(객체간의 연관관계와 구분을 어떻게 했는지 생각)
  • UML: 다른사람에게 설명하기 위한 도구

객체지향 설계 5가지 원칙

(1) S(SRP): 하나의 객체에 너무 많은 기능을 줘서는 안됨-> 수정을 한다면 수정의 이유는 하나 때문이어야한다.

(2) O(OCP): 수정보다는 확장해서 기능을 변경하는 방식으로 만들어라
(3) L(LSP): 추상객체로 사용되는 부분에 구상객체가 들어가도 아무 문제가 없어야한다.
-> 공통기능 때문에 상속을 했다면 L원칙이 깨진다.
(4) I(ISP): 인터페이스를 나누어 써라
(5) D(DIP): 구현클래스는 자주 변경될 가능성이 높기 때문에 인터페이스를 통해 의존성을 줄여라

  • 디자인 패턴: 원칙에 따라 설계를 해보아 공통점을 발견했고, 공통점들을 모아둔 것이다.
profile
뚠뚠뚠..

0개의 댓글