Study 26

리소스의 의존성 주입

대부분의 클래스는 독자적인 자원으로만 제 역할을 다하기 힘든 경우가 많다. 따라서 클래스간 리소스는 의존하게 되고 이는 의존성으로 프로그램의 복잡도에 영향을 미친다. 여기서의 예제에서는 SpellCheck라는 클래스가 Dictionary를 사용하고 의존성을 가진다고 보자. 대표적으로 두 가지 부적절한 구현이 존재한다. 1) static 클래스의 사용 public class SpellChecker { private static final Lexicon dictoary = new KoreanDictionary(); private SpellChecker(){ //Noninstatiable } public static boolean isvalid(String word){ throw new UnsupportedO..

Study 2022.11.22

Static 클래스의 noninstantiability

Static 메소드와 Static 필드르 모아둔 클래스를 만든 경우 목적은 분명하다. 이는 해당 클래스를 abstract로 만들어도 상속 받을 수 있으므로 인스턴스를 만드는 걸 막을 수 없다. 단순히 아무런 생성자를 만들지 않는다 하더라도 컴파일러가 기본적으로 아무 인자가 없는 public 생성자를 만들어 주기 때문에 인스턴스를 만들 수 있다. 따라서 명시적으로 private 생성자를 추가하는 것이 필요하다. // Noninstantiable utility class public class UtilityClass { // Suppress default constructor for noninstantiability private UtilityClass() { throw new AssertionError()..

Study 2022.11.08

싱글톤 객체 생성

오직 한 인스턴스만 만드는 클래스를 싱글톤이라 부른다. 하지만 싱글톤을 사용하는 클라이언트 코드는 mock으로 교체하는게 어렵기 때문에 테스트 하는게 어렵다. 대표적으로 싱글톤으로 만드는 두가지 방법이 존재한다. 방법 1. Final필드 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){ } } 위 경우 public static으로 외부에서 접근이 가능하지만 생성자가 private이므로 단 하나의 객체를 갖게 된다. 하지만 리플렉션을 사용한 방법을 통해 여러 객체가 생성될 여지가 있다. 방법 2. Static팩토리 메소드 public class Elvis_ { private static final E..

Study 2022.11.08

생성자 매개변수가 많은 경우에 빌더 사용을 고려

생성시 매개변수가 많은 경우 어떤 방법을 통해 생성할 수 있을지 고려해보자. 해결책 1. 생성자 기본적인 방법으로 일일이 입력하여 객체를 생성한다. NutritionFacts A = new NutritionFacts(100,10,10,0,100); 이러한 경우 필요없는 매개변수를 넘겨야 하는 경우가 존재하는데 이럴 시 Flag를 넣거나 0과 같은 기본값을 통해 로직을 구현한다. 따라서 작성하기도 어렵고 읽기에 좋지 않은 코드가 된다. 해결책 2. 자바빈 아무런 매개변수를 받지 않는 생성자를 사용해서 인스턴스를 만들고, 세터를 사용해서 필요한 필드만 설정한다. 이 방법의 단점은 최종적인 인스턴스를 만들기까지 여러번의 호출을 거쳐야 하기 때문에 자바빈이 중간에 사용되는 경우 안정적이지 않은 상태로 사용될 여..

Study 2022.11.03

생성자 대신 Static 팩토리 메소드의 사용

장점1. 이름을 가질 수 있다. 생성자의 경우 해당 클래스의 이름이 생성자의 이름이 되므로 이로 인해 생겨나는 객체의 특징이 표현되기 힘들다. 따라서 특정 Static 팩토리 메소드를 통해 생성된 객체의 특징을 규정할 수 있다. 또한 똑같은 타입의 파라미터를 받는 경우 이를 구분 하려면 별도의 Flag가 필요하다. ex> (String First_name, age, money) vs (String Second_name, age, money) 이 경우 메소드 입장에서는 첫번째 인자가 First_name인지 Second_name인지 구별 되지 않는다. 따라서 이 경우 별도의 Static 팩토리 메소드를 사용하는 것이 유용하다. 장점2. 반드시 새로운 객체를 만들 필요가 없다. 하나의 객체를 동일하게 사용하는..

Study 2022.11.02

정보처리기사 1과목 오답

브릿지 패턴은 구현으로부터 추상레이어를 분리하여 이 둘이 서로 독립적으로 변화할수 있도록한다. 이게 왜 Realization이지 CASE는 소프트웨어 생명 주기 전 단계를 연결해준다. 자동화 도구와 방법론 모두를 지칭 (=요구 분석, 설계, 유지보수 전반 지원) ex> 표준화된 개발 환경 구축 및 문서 자동화 기능 정형화된 구조 및 방법으로 생산성 향상

Study 2022.02.22