본문 바로가기

전체 글143

[자바] 스트림 정리 스트림이란 외부 반복하는 컬렉션과 달리 내부 반복을 수행한다. 재사용 가능한 컬렉션과 달리 한 번만 사용할 수 있다. 원본 데이터를 변경하지 않는다. 필터-맵 API 연산 사용으로 인한 지연 연산으로 성능 최적화 parallelStream()으로 병렬 처리 지원 스트림 동작 흐름 스트림의 생성 스트림의 중개 연산 (스트림의 변환) 필터나 맵 스트림 필터링 : filter(), distinct() filter: stream2**.**filter(n **->**n % 2 **!=**0) - 홀수만 골라낸다. distinct: 중복 요소 제거 스트림 변환 : map(), flatMap() map: 스트림의 요소를 인수로 전달해 새 스트림을 반환한다. flatmap: 여러 문자열이 있다면 분리할 수 있다. 스트.. 2022. 4. 5.
[자바] Double Brace Initialization 더블 브레이스로 인스턴스 생성 즉시 값을 넣어줄 수 있는 방법이다. 장점 생성과 초기화를 동시에 할 수 있다. 코드 가독성이 좋다. 적은 수의 코드라인 HashMap hashMap2 = new HashMap() {{ put("A", "1"); put("B", "2"); }}; 그러나 아래 결과와 같이 class가 다르다. import java.util.*; public class Main { public static void main(String[] args) throws Exception { HashMap map = new HashMap(); map.put("frank", "1"); map.put("potter", "2"); HashMap braceMap = new HashMap() {{ put("fr.. 2022. 4. 5.
[디자인 패턴] 커맨드 패턴 커맨드 패턴이란? 커맨드 패턴은 실행될 기능을 캡슐화하여 여러 기능이 가능하도록 재사용성이 높은 클래스 설계 패턴이다. 요청을 캡슐화해 호출자와 수신자를 분리하는 패턴 리모컨이 있어 버튼을 선택해야 한다고 가정해본다. 명령은 게임 관련 명령과 불 관련 명령이 있다. Invoker는 Button이 되고, Receiver는 Game, Light가 된다. Command 인터페이스를 선언해 캡슐화한다. public class Button { private Stack commands = new Stack(); public void press(Command command) { command.execute(); commands.push(command); } public void undo() { if(!commands.. 2022. 4. 5.
[디자인 패턴] 팩토리 메서드 패턴 팩토리 메소드 패턴이란? 객체 생성을 서브 클래스로 분리해서 캡슐화하는 패턴 객체 생성을 분리해 객체 생성 Product - Ship 객체 생성을 위한 클래스 ConcreteProduct Extends WhiteShip, BlackShip 객체 상속 클래스 Creator - ShipFactory 팩토리 생성 클래스 ConcreteCreator implements WhiteShipFactory, BlackShipFactory 팩토리 구현 클래스 public class Client { public static void main(String[] args) { Client client = new Client(); client.print(new WhiteShipFactory(),"whiteShip","asdf@g.. 2022. 4. 5.
[디자인 패턴] 전략 패턴 전략 패턴이란? 다양한 전략을 바꿔가며 해결하는 패턴 인터페이스와 위임을 사용해 특정 기능 변경을 할 때 사용하는 패턴 위임으로 IOC(제어의 역전), 인터페이스로 OCP를 만족할 수 있다. 언제 쓰는가? 게임에서 무기를 선택할때 칼,창,도 등급 할인 정책 자바에서 쓰이는 경우 Collections#sort() javax.servlet.http.HttpServlet javax.servlet.Filter#doFilter() 장점 Context의 변경 없이 새 전략을 추가할 수 있다. 확장에 유리한 코드 작성 단점 클래스로 분리한 각 전략들이 어느 상황에 사용되는지 알아야 함. 구체 클래스에선 인터페이스에 있는 메서드를 쓰지 않을 수도 있기에 비효율적일 수 있다. 구현해보기 상황: PM, 개발자, 개발 도구.. 2022. 4. 5.
DTO vs VO vs Entity 비교 Entity란 고유 ID가 있고 mutable한 객체 DB 테이블과 매핑되는 클래스이다. 가변 객체로 활용할 수 있다. 로직을 포함할 수 있다. DTO(Data Transfer Object)란 DTO는 데이터를 전달하기 위한 객체 가변이나 불변으로 활용할 수 있다. Controller와 View 사이에 존재한다. 로직을 포함할 수 없다. VO(Value Object)란 VO는 값 자체를 표현하는 객체 Immutable하다. 말 그대로 값을 표현하기 때문에 상태 변경이 필요가 없다. 값 비교를 위해선 equals와 hashCode를 재정의해야 한다. 로직을 포함할 수 있다. Entity, DTO의 구분 이유 DB단에서의 데이터와 View 데이터의 역할의 분리를 위해 구분한다. Entity는 실제 중요한 데.. 2022. 4. 4.
[SQL] 프로그래머스 SQL 고득점 KIT 문제 풀이 정답 -2 JOIN 풀이 없어진 기록 찾기 -- 코드를 입력하세요 SELECT outs.ANIMAL_ID, outs.NAME from ANIMAL_OUTS as outs left join ANIMAL_INS as ins on outs.ANIMAL_ID=ins.ANIMAL_ID where ins.ANIMAL_ID is null order by outs.ANIMAL_ID 있었는데요 없었습니다 SELECT ins.ANIMAL_ID, ins.NAME FROM ANIMAL_INS as ins JOIN ANIMAL_OUTS as outs ON ins.ANIMAL_ID = outs.ANIMAL_ID WHERE ins.DATETIME > outs.DATETIME ORDER BY ins.DATETIME 오랜 기간 보호한 동물 1 .. 2022. 4. 2.
[디자인 패턴] 싱글톤 패턴 싱글톤 패턴이란 인스턴스를 오직 한 개만 제공하는 클래스이다. 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러 개일때 문제가 생길 수 있다. 따라서 하나의 인스턴스만 만들어 제공하는 클래스를 만드는 것이 싱글톤 패턴이다. 싱글톤 패턴 구현법 1 - 싱글 스레드 생성자를 private로 만드는 이유 → new로 만들지 않기 위해서 getInstance()를 static으로 만든 이유 → 처음 만들어진 이후엔 null이 아니기 때문에 하나의 인스턴스만 리턴하게 된다. getInstance()가 멀티 쓰레드 환경에서 안전하지 않은 이유 1번, 2번 스레드가 있다. 1번 스레드가 처음 접근할때 null이기 때문에 new를 실행하게 된다. 그런데 거의 동시에 2번 스레드가 접근할때에도 new를 실행하.. 2022. 4. 1.
[SQL] 프로그래머스 SQL 고득점 KIT 문제 풀이 정답 -1 SELECT 모든 레코드 조회하기 SELECT * FROM ANIMAL_INS 역순 정렬하기 SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC 아픈 동물 찾기 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = "Sick" 어린 동물 찾기 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NOT INTAKE_CONDITION = "Aged" 동물의 아이디와 이름 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS 여러 기준으로 정렬하기 SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER B.. 2022. 3. 30.
[디자인 패턴] 프록시 패턴이란? 프록시 패턴이란??? Proxy는 대리자라는 의미를 갖고 있다. 비서를 거쳐 사장과 커뮤니케이션하는 개념 객체 사용을 위해 직접 참조하지 않고, 해당 객체를 바라보는 객체를 생성해 실제 객체의 생성을 미룬다. 프록시 사용 이유는? 객체 지향의 원칙인 OCP(Open-Closed Principle)을 지키기 위해서이다. 자기 자신에 대한 수정에는 열려 있고 외부의 접근에 대해서는 닫혀 있어야 한다는 원칙 프록시 패턴의 장점 객체 생성 전에도 프록시를 통해 참조가 가능하다. 실제 객체의 public, protected를 숨길 수 있다.(인터페이스로 대체) 실제 객체에 대한 사전 처리가 가능하다. 프록시 패턴의 단점 자주 사용될 경우, 가짜 객체가 생성되는 것이기에 성능 저하가 발생할 수 있다. 로직이 복잡해.. 2022. 3. 22.
[레디스] 레디스 클러스터를 도커에서 구성해보자 레디스 클러스터란? 센티넬보다 발전된 형태로 멀티 마스터 구조를 지원합니다. 샤딩을 지원해 데이터 분산으로 가용성을 높입니다. Failover 기능으로 센티넬 없이 자동으로 노드 관리를 해줍니다. cluster는 스케일 아웃이 가능합니다. 확장성이 좋습니다. [Deprecated] 스케일 아웃 시에 해시 알고리즘의 이슈를 피하기 위해 Consistent Hashing을 적용해 모든 키의 재매핑을 막고 평균적인 키만 재매핑 시켜줍니다. 레디스 클러스터와 Consistent Hashing Tech Note 정보 stdio.h 님이 작성하신 글입니다. 카테고리: [ NoSQL ] 게시됨: 03 December 2019 작성됨: 03 December 2019 최종 변경: 03 December 2019 조회수: .. 2022. 3. 17.
[레디스] 메모리 관리 기법 RDB vs AOF 차이 레디스 노드 로그를 분석하다가 RDB와 AOF라는 메모리 관리 방식에 대해 알게 되어 궁금증이 생겨 찾아보게 되었습니다. 데이터의 영속성을 위한 두 가지 방식입니다. RDB(Redis DataBase) 스냅샷과 비슷한 역할을 합니다. 특정 시점의 메모리 데이터를 전부 바이너리 파일로 저장합니다. AOF 파일보다 사이즈가 작아 로딩이 빠릅니다. 저장 방법은 redis.conf의 save로 설정합니다. save 10 1: 10초간 1번 이상 변경 시 저장 여러 개도 지정해 하나라도 만족하면 수행합니다. 메모리를 많이 사용합니다. 대규모 데이터에 적합합니다. AOF(Append Only File) appendonly.aof에 저장됩니다. INSERT,UPDATE,DELETE 명령 수행 시마다 기록됩니다. ap.. 2022. 3. 17.