ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Design Pattern] 디자인 패턴의 기본이 되는 자바 객체지향개념
    IT/개발(자바, 서블릿, 스프링 등) 2019. 10. 13. 23:10

    1. 디자인 패턴 VS 알고리즘

     

    자바 기본서를 끝낸 뒤, 프로젝트를 진행하려고 하는데 막막함이 든다면?

    프로그래밍을 할 때 일어날 수 있는 문제들에 대한 해결책으로 자료구조, 알고리즘, 디자인패턴을 배운다

     

    ** 알고리즘

    이 때 알고리즘은 문제해결을 위한 처리 절차.

    상항에 따라서 최적의 방법을 선택하여 사용.

     

    알고리즘 ex:

    서울에서 부산 가는 방법이 1. 걸어가기 2. 자전거타기 3. 버스타기 4. 기차타기 5. 비행기타기가 있듯이

    여러 데이터가 있을 때 순서에 맞게 정렬하는 방법으로 1. 단순정렬 2. 버블정렬 3. 삽입 4. 쉘 5. 퀵

     

    ** 디자인패턴

    효율적인 프로그래밍을 하고 있는지 판단하는 기준 2가지.

    - 중복된 코드가 없다.

    - 변경된 요구사항을 순조롭게 받아들일 수 있어야 한다.

    디자인패턴을 적용하는 이유는 다양한 추가 요구사항에 대해 좀 더 쉽게 대응하기 위해서이다.

     

    2. 디자인 패턴과 클래스 다형성

    밸류 타입 형변환

    int->double 자동(묵시적)형변환

    double->int 강제(명시적)형변환

     

    레퍼런스 타입 형변환

    상위 클래스와 하위 클래스 사이의 형변환

    하위 클래스 객체는 상위 클래스 객체에 대입 가능

     

    클래스의 특성을 이용한 디자인 패턴의 시작

     

    상위클래스 객체에 하위클래스 객체를 대입할 수 있다.

     

    super class는 멤버변수로 parent를 가지고 있다.

    super class를 상속한 sub class는 별도의 멤버변수인 child를 가지고 있다.

    - Super obj = new Sub();

    sub class를 new 키워드로 생성하면  메모리에 parent, child를 가진 인스턴스가 생성된다.

    sub 클래스의 생성을 super 클래스의 obj  변수로 받게 되면 obj 객체 변수는 super 클래스의 설계도를 보고 parent를 사용할 수 있다.

    하지만 super 클래스의 설계도를 보면 name 변수는 없으므로 사용할 수 없다.

     

    반대로 하위 클래스의 객체에 상위 클래스에 대입하여 사용할 수 없다

    - Super obj1 = new Super();

    - Sub obj2 = obj;

    super class를 new 키워드로 생성하면 메모리에 parent를 가진 인스턴스가 올라간다.

    이 인스턴스를 sub class 객체 변수에 대입하고, sub class 설계도는 parent, child 멤버변수를 가지고 있어서 그 설계도를 바탕으로 사용한다.

    하지만 생성된 인스턴스에는 child 변수가 없어서 에러가 발생한다.

     

    위에서 설명한 클래스 다형성은 객체지향프로그램을 구현하는 기본 기능이 된다.

    또한, 이 과정에서 디자인 패턴을 사용하는 출발점이 된다.

    앞으로 수많은 코드에서 하위 클래스 객체를 상위 클래스에 대입하여 사용하는 예를 보게 될 것이다.

     

    3. 클래스의 약한 결합, 강한 결합의 이해

    의존 주입(Dependency Injection) 자바 객체지향프로그램에서 아주 중요한 이해

     

     

    객체간의 의존관계에서 직접 생성하면 생성부터 메모리 관리를 위한 소멸까지 해당 객체의 라이프사이클을 개발자가 다 관리해야 하므로 강한 결합.

    이미 누군가가 생성한 객체를 주입 받으면 사용만 하기 때문에 약한 결합.

    객체지향프로그래밍에서 약한 결합(느슨한 결합)을 사용하면 개발자가 관리할 것이 적어진다.

    약한 결합을 사용하면 다른 클래스에서 일어나는 변화에 더 안전하다.

     

    전체가 static으로 이루어진 유틸리티 클래스들은 객체를 인스턴스화할 필요가 없기에 생성자를 private으로 만든다.

Designed by Tistory.