본문 바로가기

전체 글

(271)
[디자인패턴] 상태 패턴(State Pattern) 상태 패턴(State Pattern) 상태 패턴은 특정 상태마다 다르게 할 일을 정의하고 나아가 상태 자체를 객체화하는 디자인 패턴이다. 가장 쉬운 예시는 TV이다. TV는 ON/OFF 버튼으로 ON 상태, OFF 상태로 변환한다. 예시 컴퓨터의 전원 버튼을 누르면 전원이 켜지고, 켜진 상태에서 다시 전원 버튼을 누르면 컴퓨터를 종료할 수 있다. public class Computer { public static String ON = "on"; public static String OFF = "off"; private String state = ""; public Computer(){ setState(Laptop.OFF); } public void setState(String state){ this.st..
[디자인패턴] 어댑터 패턴(Adapter Pattern) 어댑터 패턴(Adapter Pattern) 어댑터라는 말은 흔히 아는 듯 잘 맞지 않는 구조에 대해 호환이 되게끔 하는 것을 의미한다. 객체지향 관점에서는 클래스의 인터페이스를 사용자가 기대하는 인터페이스로 변환하는 패턴이다. 이를 통해 최대한 기존 코드를 유지할 수 있다는 장점이 있다. 단점으로는 사용하기 위해 클래스가 많아지면서 복잡할 수 있고 상속을 사용하기에 유연성이 떨어질 수 있다. UML ITarget: 타겟으로 하는 인터페이스 (기존 코드) Client: ITarget 인터페이스를 요구하는 요소를 지닌 클래스 Adapter: Adaptee 클래스를 Target 인터페이스에 맞춰주는 클래스 Adaptee: ITarget 인터페이스의 요소로 집어넣고 싶은 클래스 실제 예시 전 포스팅의 전략 패턴..
[디자인패턴] 전략 패턴(Strategy Pattern) 전략 패턴(Strategy Pattern) 각 객체들이 하게 될 행위에 대해 전략 클래스를 생성하고, 유사한 행위를 캡슐화하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고, 전략(객체)을 바꿔주기만 함으로써 유연하게 확장하는 방법을 의미한다. 각 행위를 각각의 객체로 만들고, 행위의 변경이 필요한 경우 전략을 바꾸는 방식 UML Strategy: 외부에서 전략을 교체하는 인터페이스. 추상 메서드를 활용한다. ConcreteStrategyA/ConcreteStrategyB : 전략 객체 Context: Strategy를 실제 주입받아 사용하는 객체전략 패턴(Strategy Pattern) 실 사용 예시 위의 구글 검색의 경우 전체/이미지/뉴스/동영상/지도 탭을..
[디자인패턴] 팩토리 패턴(Factory Pattern) 팩토리 패턴(Factory Pattern) 팩토리 패턴은 인스턴스를 만드는 과정을 서브클래스로 위임하는 것이다. 즉, new 키워드를 사용하여 메모리를 할당하는 부분을 서브 클래스에서 작성하게된다. 이를 통해 객체 생성을 캡슐화하고 구상 클래스(concrete class)에 대한 의존성이 줄어든다는 이점이 있다. 구상(구체적인 형상) 클래스는 실제 new를 통해 메모리화 가능한 클래스, 단독으로 메모리에 올라갈 수 없는 추상 클래스와 대립되는 개념 팩토리 패턴은 팩토리 메서드 패턴과 추상 팩토리 패턴으로 나뉜다. 팩토리 메서드 패턴 조건에 따른 객체를 생성하기 위한 과정을 팩토리 클래스로 위임하여, 팩토리 클래스에서 객체를 생성해서 해당 객체를 반환한다. 예제. 좋지 않은 코드 예시 우선 Type 추상 ..
[디자인패턴] 싱글톤 (Singleton) 싱글톤 (Singleton) 싱글톤이란 프로세스 내에서 한 클래스에서 여러개의 객체 생성을 방지하는 생성 패턴이다. 즉, 하나의 프로세스에는 하나의 객체만 생성되게하는 패턴이다. 실제 사용 가능한 예시 모바일 애플리케이션의 경우 최근 다크모드를 지원하는 경우가 많다. 이런 다크모드의 경우 여러 액티비티(스크린)을 전환하면서도 같은 상태로 유지되어야 한다. 이럴 경우 다크모드 관련된 클래스는 메모리에 항상 적재되어 있으며 모든 클래스가 이를 공유해야 한다. 이 상황에서 적합한게 바로 싱글톤이다. 자바 코드 public final class Singleton{ private static Singleton instance = null; private Singleton(){} public getInstance(..
[인공지능] 합성곱 신경망의 시각화[인공지능] 합성곱 신경망의 시각화 가중치 시각화 합성곱 레이어는 여러 개의 필터를 사용해 이미지의 특징을 학습한다. 필터에는 커널이라는 가중치가 존재하며, 가중치는 이미지의 2차원 영역에 적용되어 어떤 특징을 두드러지게 하는 역할을 한다. 어떠한 특징이 있는 곳에서는 가중치가 활성화되고 특징이 없다면 활성화 되지 않는다. 모델의 레이어 중 첫번째 합성곱 층에 대한 가중치를 조사하는 과정이다. 특징이 있는 곳에서는 가중치가 활성화되고 특징이 없다면 활성화 되지 않는다. from tensorflow import keras model = keras.models.load_model('best-cnn-model.h5') print(model.layers) conv = model.layers[0] print(conv.weights[0].shape,..
[인공지능] 합성곱 신경망을 활용한 이미지 분류 합성곱 신경망 구축 앞선 포스팅에서 학습한 합성곱 신경망을 직접 구축해보자. from tensorflow import keras from sklearn.model_selection import train_test_split (train_input,train_target),(test_input,test_target) =\ keras.datasets.fashion_mnist.load_data() train_scaled = train_input.reshape(-1,28,28,1)/255.0 #깊이 1 차원 추가 train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled,train_target,test_size=0.2,ra..
[백엔드] Query Parameter와 Path Variable의 사용 개요 백엔드 API 개발 시 GET 메서드를 통해 데이터를 어떻게 전송해야 하는지 늘 고민이다. GET 메서드에서 전송 방법은 크게 Query Parameter와 Path Variable 방법이 있다. Query Parameter의 예는 다음과 같다. /user?id=1234 Path Variable의 예는 다음과 같다. /user/1234 두 주소 모두 ID가 1234인 유저를 가져오는 방법이라 했을 때 어느게 적합한가? 보통 정석은 어떤 자원(Resource)를 식별할 때는 path variable을 사용하고, 정렬이나 필터링이 필요로 할 때는 query parameter를 사용한다. 이런 코딩 컨벤션(convention)을 정립하는게 최근 새로이 중요하다고 생각된다.