전체 글 218

리소스의 의존성 주입

대부분의 클래스는 독자적인 자원으로만 제 역할을 다하기 힘든 경우가 많다. 따라서 클래스간 리소스는 의존하게 되고 이는 의존성으로 프로그램의 복잡도에 영향을 미친다. 여기서의 예제에서는 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

TLS 프로토콜

SSL -> TLS로 버전이 올라감에 따라 명칭이 바뀌었다. 2015년까지는 SSL을 썼으나 RFC라는 통신 네트워크 표준화 기관에서 TLS가 나오다가 1.2에서 통합되었다고 보면 된다. 현재 TLS1.2를 가장 많이 사용하고 1.3도 사용하곤 한다. TLS는 4계층 보안으로 end hosts간의 기밀성, 무결성, 인증 제공을 목표로 한다. => 기밀성(대칭키), 무결성(MAC), 인증(공개키) 쓰이는 곳을 보면 Https, voip, CoAP, MQTT도 Tls를 사용한다. 또한 TLS는 TCP에 대한 보안이라 생각하면 된다. UDP에 대한 보안은 DTLS로 TLS를 살짝 변형한 것이다. 이는 여기서 다루지 않는다. TLS는 총 4개의 프로토콜로 이루어져있다. 하지만 중요한 것은 Handshaking,..

IoT 2022.04.06

03/31 경제 스크랩

https://www.mk.co.kr/news/economy/view/2022/03/288340/ "가상자산 업무 허용하고 신탁산업 규제 풀어달라" 은행권, 인수위에 요청 예정 증권사처럼 투자일임업 요구도 인터넷전문銀 설립 건은 빠져 www.mk.co.kr https://www.mk.co.kr/news/economy/view/2022/03/289225/ 홍남기 "경기 회복세 어렵게 이어져…오미크론에 내수회복 제약" "대내외 불확실성으로 기업 심리 위축… 면밀한 대응 필요" "물가 상승이 경기 하방 요인으로 작용 않도록 추가 방안 발굴" www.mk.co.kr https://www.mk.co.kr/news/economy/view/2022/03/292017/ 한은 '올해의 중앙은행'에 선정…'적기 금리 인상..

3/29 경제 스크랩

https://www.mk.co.kr/news/economy/view/2022/03/280266/ `동네 장사` 전성시대…고덕 옥수 목동 상권 빠르게 회복 [신한카드 빅데이터 분석] 주거지 주변 창업 계속 늘어 고덕 35% 옥수동 24% 매출 증가 재택근무로 오피스 상권은 타격 여의도·광화문·시청은 회복세 www.mk.co.kr https://www.mk.co.kr/news/economy/view/2022/03/280875/ 이창용 한은총재후보 "불확실성 커져…국제질서 변화 통찰 중요" "성장·물가·금융안정 영향 고려하며 통화정책" www.mk.co.kr https://www.mk.co.kr/news/economy/view/2022/03/280834/ IMF "한국, 부동산 세제효과 재검토하고 민간 주택..

단지번호 붙이기, 파이썬

문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, 그 다음 N줄에는 각각 N개의 자료(0혹은 1)가 입력된다. 출력 첫 번째 줄에는 총 단지수를 출력하시오. 그리고 각 ..

Algorithm 2022.03.28

어노테이션 정리

- MVC Model : 화면에 필요한 걸 담아간다. View : 화면 그리는 것에 집중 Controller : 비즈니스 로직에 집중 - @Service - @Repository - @Controller @GetMapping, @PostMapping ... @ResponseBody : HttpMessageConverter가 동작해서 API형태로 리턴 즉 JSON포맷으로 전달한다.( 객체 리턴시, 객체 멤버 JSON형식으로 리턴됨) @RestController : 컨트롤러를 JSON을 반환하는 컨트롤러를 만들어 진다. 이는 @Responsebody를 함수마다 안붙여주고 해당 컨트롤러내의 함수는 다 API형태로 리턴하게 해줌 요청이 들어오면 Controller를 가장 먼저 찾는다. 이후 Static을 찾아간..

Spring Boot 2022.03.20