CS
오늘부터 Java를 공부를 안 할 때는 CS에 대해 블로그 글을 쓰려고 한다.
CS는 학부생일 때도 배우지 않아서 처음이지만 어느 정도 OOP에 대한 지식은 유니티로 게임 개발을 했기에 알고 있다.
하지만 지키기 쉽지 않았다. 왜 OOP를 해야 하고 테스트 코드를 작성해야 하고 나는 오늘부터 알아갈 생각이다.
CS 공부는 면접을 위한 CS 전공지식 노트를 참고했다.
용어
라이브러리
- 공통적으로 사용될 수 있는 특정한 기능들을 모듈화한 것.
- 프레임 워크에 비해 자유롭다!
- 예를 들면 요리를 할 때 '도구'인 '칼'을 사용해서 '내가'직접 컨트롤하여 자르는데, 라이브러리는 이와 비슷하다!
프레임워크
- 공통적으로 사용될 수 있는 특정한 기능들을 모듈화한 것.
- 폴더명, 파일명 등에 대한 규칙이 있어서 라이브러리에 비해 좀 엄격하다!
- 다른 곳으로 이동할 때 '도구'인 비행기를 타고 이동하지만 '비행기'가 컨트롤하고 나는 가만히 있어야 한다, 프레임워크는 이와 비슷하다!
디자인 패턴
디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것!
1. 싱글톤 패턴 (singleton pattern)
- 싱글톤 패턴은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴.
- 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만, 그렇게 하지 않고
- 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는 데 쓰임.
- 보통 DB 연결 모듈에 자주 사용된다.
1.1 싱글톤 패턴의 장/단점
장점 :
하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈이 공유하여
사용하기 때문에 인스턴스를 생성할 때 비용이 줄어든다.
단점 :
- 의존성이 높아진다.
- TDD(Test Dirven Development)를 할 때 걸림돌이 된다.
싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로
각 테스트마다 '독립적인' 인스턴스를 만들기 어렵다
의존성 주입
싱글톤 패턴은 사용하기 쉽지만 모듈 간의 결합을 강하게 만들 수 있기에, 이때 의존성 주입(DI, Dependency Injection)을 통해 모듈 간의 결합을 조금 더 느슨하게 만들어 해결할 수 있다!
의존성 주입의 장점
- 모듈을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고 마이그레이션하기도 수월하다.
- 모듈 간의 관계들이 조금 더 명확해진다.
의존성 주입의 단점
- 모듈들이 더욱 분리되므로 클래스 수가 늘어나 복잡성이 증가할 수 있다.
- 약간의 런타임 패널티가 발생할 수 있다.
의존성 주입 원칙
- 의존성 주입은 "상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다.
- 둘 다 추상화에 의존해야 한다. 이때 추상화는 세부 사항에 의존하지 말아야 한다.
싱글톤 패턴 예시
직접 작성하고 테스트를 한 싱글톤패턴이다.
public class Main {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
instance.TestSingleton();
}
}
class Singleton {
private static final Singleton INSTANCE = new Singleton();
public static Singleton getInstance() {
return INSTANCE;
}
public void TestSingleton() {
...
}
}
사실 의존성 주입이랑 싱글톤 패턴은 게임 제작할 때 많이 위배하는 것 같다.
실제로 다른 클래스를 인스턴스로 만들지 않고 싱글톤 패턴으로 만들어서 그냥 가져왔을 때 위의 경험을 직접 해보았다..
사실 아직도 잘 모르기 때문에 매번 반복해서 봐야겠다.
나는 C#에서 Managers 즉 데이터 관리 쪽은 Singleton 패턴을 만들고
UI나 기타 외부는 만들지 않고 사용하고 있다.
만약 외부 UI에 접근이 필요할 때는 매개변수를 통하여 클래스를 싱글톤으로 보내서 작업하는데
이게 의존성 주입을 잘 하고 있는 것인가? 에 대해서는 확신이 들지 않는다.
반복해서 봐야 할 수밖에 없다! 반복이 곧 답이다.
'Cs ( Computer Science ) > 디자인 패턴' 카테고리의 다른 글
[CS] 디자인 패턴 - 팩토리 패턴 (1) | 2023.10.27 |
---|
Comment