본문 바로가기

Programming

(13)
[Design pattern] Factory method pattern Factory Method Pattern 팩토리 메소드 패턴을 사용하는 이유는 클래스간의 결합도를 낮추기 위한것이다. 결합도라는 것은 간단히 말해 클래스의 변경점이 생겼을 때 얼마나 다른 클래스에도 영향을 주는가이다. 팩토리 메소드 패턴을 사용하는 경우 직접 객체를 생성해 사용하는 것을 방지하고 서브 클래스(팩토리 메소드 클래스)에 위임함으로써 보다 효율적인 코드 제어를 할 수 있고 의존성을 제거한다. 결과적으로 결합도를 낮춰 유지보수가 용이해진다. EX. AAC ViewModel 을 생성할 때 정의하는 ViewModelProvider.Factory 참고 : 팩토리 메소드 패턴(Factory Method Pattern), [Design_Pattern] 팩토리 메서드 패턴(Factory Method Pat..
[Design pattern] Adapter pattern Adapter Pattern 어댑터 패턴은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. (출처:위키백과) 아래 사진으로 보면 클래스의 인터페이스 - Client, 다른 인터페이스 - Adaptee 로 보면 된다. 어댑터 패턴은 이미 구축되어있는 것을 새로운 어떤 것이 사용할 때 양쪽 간의 호환성을 유지해주기 위해 사용한다. 기존의 로직을 그대로 이용할 수 있도록 중간에 변환기를 만든다는 느낌으로 이해하면 된다. 어댑터 패턴을 구현하는 방식은 아래와 같이 두가지가 있다. 클래스 방식 : 어댑터 클래스에서 기존 클래스를 extends 하고, 인터페이스를 implements 하는 방식이다...
[Design pattern] Singleton pattern Singleton Pattern Singleton Pattern 단 하나의 인스턴스만 생성해 사용하는 디자인 패턴. 같은 인스턴스가 필요할 때 기존에 생성된 인스턴스를 사용하도록 함. 이렇게 인스턴스를 유일하게 사용해야하는 경우가 언제인지는 직접 파악해야한다. 싱글톤 패턴을 쓰는 이유 단 한번의 new로 생성하여 고정된 메모리 영역을 얻기 때문에, 메모리 낭비를 방지할 수 있다. 싱글톤으로 만들어진 인스턴스는 전역 인스턴스이기 때문에 다른 클래스와 데이터를 공유하기가 쉽다. 하지만 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 결합도가 높아져 개방-폐쇄 원칙을 위배하게 된다(객체 지향 설계 원칙에 어긋남). 자바에서는 생성자를 private으로 선언하여 new 를 사용한 객체 생성이 불가..
[Design pattern] Builder pattern Builder Pattern Builder Pattern 빌더 패턴은 추상 팩토리 패턴이나 팩토리 메소드 패턴처럼 새로운 객체를 만들어서 반환하는 패턴이긴 하지만 실제 동작 방식은 조금 다르다. 빌더 패턴은 생성자에 들어갈 매개 변수가 많든 적든 차례차례 매개 변수를 받아들이고, 모든 매개 변수를 받은 뒤에 이 변수들을 통합해서 한번에 사용한다. Builder pattern으로 해결할 수 있는 것 불필요한 생성자를 만들지 않고 객체를 만든다. 데이터의 순서에 상관 없이 객체를 만들어 낸다. 사용자가 봤을때 명시적이고 이해할 수 있어야 한다. builder pattern의 예시 Retrofit Observable Glide, Picasso … 참고 : 빌더 패턴(Builder Pattern), [patte..
[Design pattern] Observer pattern Observer Pattern Observer Pattern 상태를 가지고 있는 주체 객체와 상태의 변경을 알아야 하는 관찰 객체(Observer Object)가 존재하며 이들의 관계는 1:1이 될 수도 있고 1:N이 될 수가 있다. 서로의 정보를 넘기고 받는 과정에서 정보의 단위가 클 수록, 객체들의 규모다 클 수록, 각 객체들의 관계가 복잡할 수록 점점 구현하기 어려워지고 복잡성이 매우 증가할 것이다. 이러한 기능을 할 수 있도록 가이드라인을 제시해 주는 것이 바로 옵저버 패턴이다. 옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 정보가 갱신되는 1:N 의 관계를 정의한다. 연결은 인터페이스를 이용하여 느슨한 결합성을 유지한다. 주체, 옵저버 인터페이스..
[Java] Annotation, Annotation Processing, Reflection Annotation 자바 어노테이션(Java Annotation)은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. JDK 1.5 버전 이상에서 사용 가능하다. 본질적인 목적은 소스코드에 메타데이터를 표현하는 것. 단순히 부가적인 표현뿐만이 아닌 리플렉션을 이용하면 어노테이션 지정만으로도 원하는 클래스를 주입하는 것이 가능해진다. 참고 : Java Annotation이란?, Java - Annotation(어노테이션 활용 예제1), Java Annotation: 인터페이스 강요로부터 자유를…(어노테이션 활용 예제2), 깔끔한 정리 Annotation Processing 컴파일 단계에서 어노테이션만 가지고 자바코드를 만들어내는데 사용됨. Room, ..
[Java] toString() 메서드 toString 메서드toString() 메서드는 모두 클래스 인스턴스의 데이터를 문자열로 반환하는 메서드이다. 이 메서드를 클래스에서 정의하는 것은 개발자 간의 약속이라고 할 수 있다. 원래 toString()은 java.lang 패키지의 클래스에서 다음과 같이 정의된 메서드이다. 그리고 클래스 이름@해시값의 형태로 문자열을 반환한다.★ Note : 해시값은 Java가(?) 인스턴스에 임의의 값을 부여한 것.public class Object { // 중략 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } // 중략 } Java의 모든 클래스는 Object 클래스를 상속받는다. ..
[Kotlin]코틀린을 이용한 안드로이드 프로그래밍 실습 04 퀴즈 : 1. 탑레벨의 고차 함수 TimeLogCheck 를 만든다. 2. TimeLogCheck 는 String 타입의 tag 와 함수타입 (tag:String) -> List 을 가지는 f 를 인자로 갖는다. 3. TimeLogCheck 에서 인자로 받은 람다를 실행하기 전에 “현재시간 : tag -> 시작” 이란 로그를 출력하고 람다를 실행한 후에 “현재시간 : tag -> 종료(elapsed time : 종료 – 시작)” 을 출력한다. 4. TimeLogCheck 는 람다함수가 리턴한 값을 리턴한다.5. 순서대로 1~1000 까지 가지는 mutableList 타입의 initList 를 생성한다. 6. A : 리스트의 filter 로 짝수를 걸러내고, map 에서 Int 를 String 으로 바꾼 ..