2018년 2월 10일 토요일

패스트 캠퍼스 1DAY CLASS : UML로 배우는 객체지향과 디자인패턴


  • 김성박 강사
    • NHN 엔터테인먼트 Dooray 개발실 수석
    • (주)써니베일 대표이사
    • T3Q(주) 기술이사
    • 삼성 SDS 멀티 캠퍼스 전임강사
  • 개발자 공부
    • 자바 기본기 공부
    • 면접은 멘탈을 망가트리는 단계
    • 개념 암기가 아니라 실습이다.
    • 잘만들고 싶다라는 생각을 가져야 한다.
  • 강의
    • 추상화
      • 중요한건 남기고 불필요한건 제거한다.
    • 재사용
      • 비즈니스 모델(업무)이 들어가면 재사용이 어렵다.
      • 특정 관점으로 추상화된 객체는 다른 관점에서는 사용되기 어렵다.
    • 상속관계
      • 비지니스 모델에 따라 상속관계가 달라진다. ex) 자동차 구조도
      • 부모타입으로 생성된 자식 객체는 부모타입에 있는 메소드만 사용가능하다.
      • UML에서 실선으로 표시
    • 인터페이스
      • 메소드가 오버라이딩 되면 무조건 자식것이 실행된다.
      • 먼저 기능을 정의한다.
      • UML에서 점선으로 표시
    • UML
      • 의존관계는 점섬표시
      • 화살표 표시는 가진다라는 뜻
    • null
      • 아무것도 참조하지 않는다.
    • 일반화
      • 추상 클래스 : 일반화 시키면서도 존재하지 않는 단어들이 존재하고있다.
    • 객체
      • 인터페이스를 객체로 선언하는것이 좋다.ex)  List list = new ArrayList();
    • 정적
      • 레퍼런스 타입만 봐서는 어떤 인스턴스가 사용될지 알기가 어렵다.
    • 직렬화
      • 기본형타입은 java.io.serializable 를 구현했으면 직렬화를 사용하여 byte단위로 전송가능하다.
    • 개발 라이프 싸이클
      • as-is : 요구사항 정의 -> 분석 -> 설계 -> 구현 (CBC)
        - 제조업 베이스 방법으로 과거에 진행되었지만 망했다.
      • 고객에게 빠르게 화면을 보여주고 개발작업과 수정작업을 진행
        - 수정시 TEST  진행
        - 지속적인 빌드, 통합 테스트(CTIP)
      • 레퍼런스 모델 -> 레퍼런스 아키텍처 -> (비지니스모델) -> 아키텍처 정의 -> 설계(요구사항정의)
        - 정답은 없지만 개발자는 항상 고민해야한다.
      • 요구사항정의 -> 설계 -> 구현 구간을 반복
    • 디자인패턴 공부는 초보자는 개념적인 부분을 공부하고 경력자는 객체지향 공부를 위해 
    • Antlr
    • Design pattern
      • 커뮤니케이션 용도로 필요 / 상호간에 내용에 대해 모두 알아야한다.
      • Single pattern
        • Application에서 어떤 객체가 단 하나만 생성되어서 동시에 사용되어야 할때 적용되는 Pattern
        • 메소드만 있을때는 동시에 사용해도 상관없다.(지역변수는 새로 생성되기떄문)
        • static과 New를 사용하지 않고  메소드를 통해 호출하기 위해 사용
      • Builder Pattern
        • 객체생성 작업을 대신해줄 하나의 클래스를 추가하는 Pattern
        • 여러개의 메소드중에 특정 몇개만 사용
        • 하나의 메소드는 결과를 반환한다.
        • 추상클래스에 메소드가 추가되면 상속된 클래스는 메소드를 추가해야한다.
        • 부분을 만드는 메소드를 추상메소드로 만들고 그 부분을 만드는 부분은 자식에게 맡긴다. 완성품은 부모에서 만든다. 
        • Effective Java 에서 Builder 패턴
          - 생성자 파라미터에 값을 넣는경우에는 API문서를 봐야 확인이 가능하여 자신의 메소드를 호출해서 값을 넣고 완성 메소드를 호출한다.
      • Prototype Pattern
        • 새로운 객체를 생성 할 때 new 연산자를 사요하지 않고기존의 객체를 복사하여 이용하는 Pattern
      • Adapter Pattern
        • 이미 존재하는 클래스의 인터페이스가 우리가 사용하고자 하는 인터페이스와 맞지 않을 때 이를 변환시켜 사용 하는 Pattern
      • Facade Pattern
        • 객체를 감싸서 인터페이스를 단순화시킬 수 있는 Pattern
      • Bridge Pattern
        • 복합 객체의 생성 과정과 표현 방법을 분리함으로써 동일한 생성 공정이 서로 다른 표현하는 Pattern
      • Composite Pattern
        • 재귀적인 구조를 만드는 Pattern
        • 폴더가 파일 또는 폴더를 가질수 있다.
      •  Decorator Pattern
        • 장식할 대상과 장식을 동일시화 하는 Pattern
        • 생성자 매개변수를 확인하자
        • 주인공과 장식을 구분할 수 있어야 한다.
          - System.in, System.out 은 주인공이다. : 기능이 적다
          - 주인공 : 결정하는 곳
          - 장식 : 다양한 방법을 구현하는 곳
        •  FileReader등등
      • FlyWeight Pattern
        • 인스턴스를 가능한 한 공유시켜 쓸데없이 new 연산자를 사용하지 않도록 함으로써 객체를 '가볍게' 만들기 위한 Pattern
      • Proxy Pattern
        • 본인 대신해 일을 처리해야 할 대리인을 두는 Pattern
      • Iterator Pattern
        • for 이나 while문을 빠져나갈지 조건을 정해주게 되는데 이러한 탈출조건을 가지고 있는 변수를 추상화해서 일반화 한  Pattern
      • Template Method Pattern
        • 템플릿의 기능을 가진 Pattern
        • 자식에게 구현되는 부분을 맡기고 접근제한자를 통해 제한을 둔다.
      •  Visitor Pattern
        • Visitor은 '방문자'라는 의미를 가진다. 데이터 구조와 처리를 분리한다. 그리고 구조 안을 돌아다니는 주체인 '방문자'를 나타내는 클래스를 준비해서 그 클래스에게 처리를 맡긴다.
      • State Pattern
        • 일반적으로 생각하는 사물이 아닌 '상태'를 클래스로 표현하는 Pattern
        • Strategy Pattern 구조도가 똑같다.
        • Reuntime시 상태에 대한 변경작업이 가능하다.
        • 상태에대한 추가작업시 관련된 소스 수정 작업이 필요하다.
      • Strategy Pattern
        • 알고리즘을 구현한 부분이 모두 교환 가능하도록 만드는 Pattern
        • 전략에 대한 값을 실시간으로 변경
      • Observer Pattern
        • 관찰 대상의 상태가 변하면 관찰자에게 통지된다.
        • 관리보다는 통지하는 의미로 이해
      • Chain of Responsibillity Pattern
        • 요구하는 측과 처리하는 측의 연결을 느슨하게 하여 책임을 떠넘기는 Pattern
        • 상황에 따라 요구를 처리할 객체가 변하는 프로그램에도 대응
      • Memento Pattern
        • 인스턴스 상태를 나타내는 역할을 도입해서 캡슐화의 파괴가 일어나지 않으면서 보존과 복원을 실행하는  Pattern 
Share:

0 개의 댓글:

댓글 쓰기