본문 바로가기
Web/Java

Java(22) - review3

by SeleniumBindingProtein 2022. 1. 28.
728x90
반응형

1. 객체지향 프로그래밍
    1) 추상화 (Abstraction)와 일반화
        - 어떤 영역에서 필요로 하는 속성이나 기능을 추출하는 작업
        - 데이터 구조, 표현방법에 대한 추상화 
        - 처리 과정에 대한 추상화 
        - 추상화의 의도는 단순화이며, 일반화의 의도는 공통점을 뽑아내는 것
    2) 캡슐화 (Encapsulation)
        - 데이터를 감싸서 외부에서 사용 가능한 부분만 제공(information hiding)
        - 사용하는 코드(클라이언트 코드)가 세부적인 사항을 알 필요가 없음.
        - 단순한 접근을 제공하여 오류가 생길 부분을 감소화
          - (private) 나만 볼수 있는 것, 같은 클래스 내부에서만 접근 가능
          # (protected) 같은 패키지나 부모와 자식에게만 접근 가능 즉 상속관계의 클래스만 접근 가능
          + (public) 누구나 접근 가능, 내부,외부에서 접근 가능 
          ~ (package) 
    3) 상속성 (Inheritance)
        - 일반적인(general) 개념의 객체에서 보다 구체적인(specific) 개념의 객체의 관계를 표현.
        - 상위 클래스의 속성과 기능을 하위 클래스에서 사용하거나 재정의 할수 있음.    
    4) 다형성(ploymorphism)
        - 같은 메세지, 같은 구현에 대해 각 객체가 다른 표현과 결과를 나타내는 것.
        - 클래스의 상속, 인터페이스의 구현 시에 다른 구현을 가진 클래스들이 상위 타입으로 업캐스팅이 됨.
        - 이때 각 클래스의 오버라이딩한 메서드가 존재하는 경우 비록 상위 타입으로 선언된다 하더라도
          각기 다른 인스턴스의 메서드가 호출됨.  

2. 객체지향 설계      
    - 잘 만들어진 소프트웨어는 응집도는 높고 결합도는 낮아야 함.     
    1) 응집도 
        - 하나의 모듈, 객체 내부의 요소들간의 연관성 
        - 하나의 책임을 구현하는 하나의 객체는 높은 응집성을 가짐.  
    2) 결합도    
        - 객체 상호간의 연관 관계
        - 결합도가 높으면 하나의 객체를 수정할때 다른 객체도 수정해야 함.    

3. 추상 클래스 (Abstract Class)
    - 추상 메서드를 하나 이상 가지고 있는 클래스 
    - 인스턴스화 할 수 없음.
    - 추상 메소드는 모든 하위(파생) 클래스가 반드시 추상 메서드를 재정의 해야함.

4. 인터페이스 
    - 서로의 정보를 교환하기 위한 일종의 공유된 접촉점.
    - 보통 interface 키워드로 정의 
    - 클래스끼리는 다중 상속을 지원하지 않지만
      인터페이스를 사용하면 여러 인터페이스로부터 상속하는 것이 가능함.

5. 템플릿 메서드 
    1) 템플릿 : 틀이나 견본을 의미
    2) 템플릿 메서드 : 추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)를
                      정의해 놓은 메서드.
                      final로 선언하여 재정의 할수 없게 함.
    3) 템블릿 메서드 패턴 
        - 디자인 패턴의 일종 
        - 프레임워크에서 많이 사용되는 설계 패턴  
        - 추상 클래스로 선언된 상위 클래스에서 추상 메서드를 이용하여 전체 구현의 흐름을 정의하고
          구체적인 각 메서드 구현은 하위 클래스에 위임함.
        - 하위 클래스가 다른 구현을 했더라도 템플릿 메서드에 정의된 시나리오 대로 수행됨.
        - 상위 클래스에서는 전체적인 흐름을 구현하고 구체적인 처리는 하위 클래스단에 위임.                       

728x90
반응형

'Web > Java' 카테고리의 다른 글

Java(25) - 람다식  (0) 2022.01.28
Java(24) - 내부클래스  (0) 2022.01.28
Java(21) - 컬렉션프레임워크  (0) 2022.01.28
Java(20) - Generic 프로그래밍  (0) 2022.01.28
Java(18) - Class 클래스  (0) 2022.01.28

댓글