OOP(Object Oriented Programing)

객체지향프로그래밍

  • type 만들기 = Class 만들기


OOP 특성

1. 캡슐화

내가만든 객체가 스스로 기능을 하는데 있어서
외부의 영향을 안받으면서 안정성확보해야
= 내꺼 뺏기거나 남이 정보 바꾸거나 하지않게
=> 캡슐화 필요


  • 완성도가 있다 = 기능을 수행하는 단위로써 완전함을 가짐
  • 정보 은닉 = 객체 정보 밖으로 전달 or 밖에서 접근 불가

=> 객체는 스스로 동작할 수 있는 환경을 가져야함!
(외부에 의존하거나, 외부의 침략은 제한해야)


캡슐화를 위해 접근지정자 필요

  • private : 그 객체만 소유
  • protected : 상속된 객체에서 접근가능
  • (friendly) : 같은 패키지 내에서 접근가능
  • public : 모두 다 접근 가능


  • ex)
Class Human{
  Heart heart;
  Blood blood;
}

Human human = new Human();
h.heart.stop();

예를 들어주셨는데 확 와닿았던..!
남이 내 심장에 막 접근해서 멈추게하면 안되니까?
남이 내 피에 막 접근해서 내 피 다 가져가면 안되니까?
-> 접근지정자 private
헌혈의 경우는? -> 접근지정자와 메서드를 이용해서

Class Human{
  private Heart heart;
  private Blood blood;
  
  Blood donation(){
    return null;
  }
}

Human human = new Human();
h.donation();  


2. 상속

  • 상위, 부모, super, 추상
  • 하위, 자식, (this), 구체


  • 많이 하는 오해 : 공통된 기능을 여러 객체에게 전달하고 싶을 때 하나를 만들어서 상속한다?! (X)
  • 포유류 > 사람 > 남자 > 짱구 (O)


3. 추상화

  • 위로 올라갈수록 추상화된 객체 : 추상체
  • 아래로 내려갈수록 구체적인 객체 : 구상체

=> 이는 서로 상대적임 = 객체간의 관계에서 상위에 있는것이 항상 하위보다 추상적이어야함!


4. 다형성

형(type)을 여러가지로 표현할 수 있다

  • ex) Interface Login
    • Class KakaoLogin implements Login
    • Class NaverLogin implements Login
Login login1 = new KakaoLogin();  
Login login2 = new NaverLogin();  
  • 인터페이스 왜 필요? : 캡슐화가 되기 위해선 서로의 기능을 막쓰면, 접근하면 안되니까



객체지향 설계

어떻게 하면 객체지향을 잘 할 수 있나?
=> 객체를 잘 나누고 잘 연관관계를 구성해야

  • 객체를 어떻게 구분했다
  • 객체간 연관관계가 어떠하다
    를 설명하기 위한 도구 = UML


UML

  • UseCase Diagram
  • Sequence Diagram
  • Package Diagram
  • Class Diagram

사이트 : draw.io / staruml.io


객체지향 설계를하는 5가지 원칙 : SOLID

  • SRP(Single Responsibility Principle) : 단일 책임 원칙
  • OCP(Open Closed Priciple) : 개방 폐쇄 원칙
  • LSP(Listov Substitution Priciple) : 리스코프 치환 원칙
  • ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
  • DIP(Dependency Inversion Principle) : 의존 역전 원칙


=> 원칙에 따라 설계를 해봄 => 공통점이 있네 => 디자인패턴


Design Pattern

사이트 추천 : refactoring.guru
23가지 공부하기
추가) Design Pattern 공부하고 정리해봄


일기

  • 부트캠프용 인텔리제이를 지원받았다(사실 어제)
    인텔리제이를 처음 써봐서 어렵지만 좋은 경험과 기회라구 생각한다
    곧 맥북을 장만할거라 혼란스럽지만, 일단은 윈도우로 단축키 파악하기 스타뚜


  • 흑9팀 첫 멘토미팅을 했다

zzzz


  • 오늘의 귀여움 게더타운! 처음 써보는데 넘 귀엽고 재밌움
    • z를 누르면 춤춘다
    • f 누르면 뭔가 뿌림
    • 다 같이 하고 있는 우리가 넘 귀여움
    • 오늘 내 아바타를 단디 꾸미고 들어갔다 낼은 팀원들도 꾸미고 온다해서 단체사진 다시 찍기루

춤추기


업데이트: