티스토리 뷰

 

오늘의 일기

"장고 튜토리얼을 공부할 때 MVC 패턴에 대해서 짧게 배웠는데, 이게 뭘 어떻게 한다는 건지 대충 넘어갔었.... 다.... 그래도 다시 공부하는 겸.. 꼼꼼히 살펴봐야겠다...🙄"

 

 

 

프로그램을 설계할 때 발생하는 문제를 객체 간의 상호관계 등을 이용하여 해결할 수 있도록 형식화된 규약?이라고한다.

싱글톤 패턴 (singleton pattern)부터 MVVM 패턴까지 10가지의 패턴들이 있다. 

 

싱글톤 패턴 (singleton pattern)

싱글톤 패턴은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴, 데이터 베이스 연결 모듈에 많이 사용된다.

(데이터베이스 연결 모듈이라고 하니까 확 와닿았다. 감을 잡..았달까나..?)

 

Django에서 데이터베이스 연결 예시

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

 

단점

싱글톤 패턴은 하나의 인스턴스만 가지기 때문에 단위 테스트를 할 때 테스트마다 독립적인 인스턴트를 만들기 어려워 TTD(Test Driven Development)할 때 좋지 않다고 한다.

 

의존성 주입

또 모듈 간의 결합이 강하기 때문에 의존성 주입(ID Dependency Injection)을 통해 결합을 조금 느슨하게 만들어 해결할 수 있다.

 

메인 모듈에 모듈들이 직접 연결되었다면 직접 모듈을 연결하지 않고 중간에 커넥터처럼 의존성 주입자를 사용해 간접적으로 의존성을 주입하는 방식이다.

 

 

/*
면접을 위한 cs 전공 지식 노트 예제
1. singleton pattern 
    하나의 클래스의 하나의 인스턴스를 가지는 패턴
    사용하기 쉽고 굉장히 실용적이지만, 결합이 강하기 때문에 의존성 주입을 통해 연결을 느슨하게 만들 수 있다.
    하나의 인스턴스만 가지기 떄문에 TDD (test)가 어렵다.
    대표적인 싱글톤 패턴의 예시는 데이터베이스 연결 모듈이 있다.
*/

class Singleton {
    private static class singleInstanceHolder {
        private static final Singleton INSTANCE = new Singleton(); // 인스턴스 선언 및 생성
    }
    public static synchronized Singleton getInstance() {
        return singleInstanceHolder.INSTANCE;
    }
}

public class SingletonPattern {
    public static void main(String[] args) {
        Singleton a = Singleton.getInstance();
        Singleton b = Singleton.getInstance();
        System.out.println(a.hashCode());
        System.out.println(b.hashCode());
        if (a==b) {
            System.out.println(true);
        }
    }
}

/* 실행 결과값

2124308362
2124308362
true

*/

전문 및 출처 - 면접을 위한 CS 전공 지식 노트 

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

디자인 패턴 - 전략 패턴(strategy pattern)  (0) 2022.10.13
디자인 패턴 - 팩토리 패턴 (factory pattern)  (0) 2022.10.06
Mqtt protocol  (0) 2022.08.29
HTTP 통신 구조  (0) 2022.07.19
CSS- display, position  (0) 2022.06.22
댓글