분류 전체보기 29

[Effective Java-ITEM 2] Builder

Builder 이전의 생성 방식 점층적 생성자 패턴 정적 팩토리 메소드나 생성자의 경우 파라미터가 많은 경우 적절히 대응하기가 쉽지 않다. 다음은 생성자 또는 정적 팩토리 메소드에서 사용했던 점층적 생성자 패턴이다. public class Car{ private final int type; private final int doors; private final int oilType; public Car(int type){ this(type, 4); } public Car(int type, int doors){ this(type, doors, 0); } public Car(int type, int doors, int oilType){ this.doors = doors; this.type = type; thi..

[Effective Java-ITEM 1] 정적 팩토리 메소드

전통적인 인스턴스 생성 방법 클래스의 인스턴스 생성 방식 중에 흔히 사용 하는 것이 public 생성자이다. 생성자를 통해 인스턴스를 생성하여 사용하게 되면 어떤 것을 반환하고자 하는지 찾기가 모호해질 수 있다. class Pizza{ private final String cheese; private final String topping; private final int size; public Pizza(String cheese, String topping, int size){ this.cheese = cheese; this.topping = topping; this.size = size; } ... } 위의 코드를 보면 Pizza 인스턴스를 생성하려면 다음과 같이 생성해야한다. Pizza cheeseP..

Collection Interface로 업캐스팅을 하는 이유

List, Set, Map을 사용하다보면 습관적으로 List 리스트= new ArrayList처럼 사용하게 된다. 하지만 구현체를 직접 선언하여 ArrayList 리스트 = new ArrayList로 사용하게된다면 다음과 같은 린트(Lint) 메시지를 확인 할 수 있다. Declarations should use Java collection interfaces such as "List" rather than specific implementation classes such as "LinkedList" The purpose of the Java Collections API is to provide a well defined hierarchy of interfaces in order to hide imple..

Try-With-Resources를 이용한 자원 반납

Java7 이전에는 자원을 해제 하기 위해서 try-catch-finally를 사용하여 자원을 해제했다. BufferedReader br = null; try{ br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str); }catch(IOException e){ e.printStackTrace(); }finally{ if(br != null{ try{ br.close(); }catch(Excetpion e){} } } Java7 이후에 생긴 기능 중 하나인 try-with-resources는 try 구문에서 자원을 생성하고 사용을 완료하면 자동 반납(Close)해주는..

[Spring Boot] DI(의존성 주입)

Spring의 핵심 기술중 하나인 DI(의존성 주입)에 대해 알아보자. 필드 주입(Field Injection) 필드 주입은 필드에서 바로 주입하는 방법이다. 과거에 많 이용되었지만 외부에서 접근이 불가능하고, 테스트코드 작성 시 필드의 객체를 수정할 수 없게 되어 사용하지 않게 되었다. 즉 강한 결합으로 인해 외부에서 사용하기가 어려워진다. //Field Injection public class MyController{ @Autowired private MyService myService; } 수정자 주입(Setter Injection) 수정자 주입은 Setter Method을 통해 주입하는 방법이다. 주입 받는 객체가 변경될 가능성이 있는 경우에 사용한다. 의존관계를 나타낼 수 있으나, 필수적으로 주..

강한 결합과 약한 결합

강한 결합 어떠한 객체가 다른 객체에 강한 의존성을 가지고 있음을 말한다. 아래의 클래스를 보면 사람이 개를 훈련하다라는 의미를 부여할 수 있다. public class Dog{ public void train(){ System.out.println("train dog"); } } public class Cat{ public void train(){ System.out.println("train cat"); } } public class Person{ private Dog dog; public Person(){ dog = new Dog(); } public void trainAnimal(){ dog.train(); } } Person 클래스를 보면 맴버 변수로 Dog 클래스를 가지고 있다. 여기선 단점을..

암호화 알고리즘 종류

정의 평문(Plaintext) - 해독 가능한 형태의 메시지 암호문(Ciphertext) - 해독 불가능한 형태의 메시지 암호화(Encryption) - 평문을 암호문으로 변환하는 과정 복호화(Decryption) - 암호문을 평문으로 변환하는 과정 양방향 암호화 암호화와 복호화 과정을 통해 송, 수신 간 주고받는 메시지를 안전하게 암, 복호화하는 과정이다. 1. 대칭키 암호화 암호화와 복호화 시 같은 키를 사용하며, 계산속도가 빠르다. 종류 : AES128, AES256, SEED(국내 표준) 문제점 : 수신 측에 키를 전달하는 과정에서 유출될 우려가 있다. 2. 비대칭키 암호화 암호화와 복호화 시 서로 다른 키를 사용한다. 공개키(Public Key)와 개인키(Private Key)가 한 쌍으로 이루..

[Kafka] (2) Topic과 Partition

Events, Streams, Topics Events Event란, 과거에 일어난 사실을 뜻한다. Event는 발생함으로 인해 변화된 상태를 가지고 시스템 사이를 오가는 불변의 데이터이다. Streams Event Stream이란, 관련된 Event들을 나타낸다. Topics Event Stream이 Kafka에서는 Topic이란 이름으로 저장된다. Kafka에서는 Topic이 구체화된 Event Stream을 뜻한다. Topic은 데이터베이스의 테이블이나 파일 시스템의 폴더들 같이 연관된 Event를 묶어 영속화한다. Topic은 Kafka에서 Producer 와 Consumer 를 분리하는 중요한 컨셉이다. Producer 는 Topic에 Message(Event)를 저장 (Push) 하고 Cons..

[Kafka] (1) Kafka란?

Kafka란? Kafka는 Distributed Event Streaming Platform(분산 이벤트 스트리밍 플랫폼)이다. Publish-Subscribe 모델의 Message Queue이며, 분산에 특화되어 있다. 기본 구조 1.1 Event Event는 Producer와 Consumer가 데이터를 주고 받는 단위이다. 1.2 Topic Event가 쓰이는 곳이다. Topic은 파일시스템의 폴더 또는 디렉토리와 유사하며, 이벤트는 폴더안의 파일과 유사하다. Topic의 개수는 제한이 없고, 이름으로 구분된다. Topic이 다시 특정한 개수의 partitions이 된다. 개수의 명시가 필요하다 1.3 Partition Topic이 나눠지는 단위이다. Partition에 한 번 쓰여진 데이터는 변경이..

curl명령어로 HTTP GET,POST 호출하는 방법

curl 명령어란? 스크립트 또는 쉘상에서 데이터를 전송하기위해 사용되는 command line tool이다. curl은 다양한 프로토콜을 지원한다. (HTTP, HTTPS, IMAP, FTP, FTPS, POP3, MQTT, SMTP 등등) curl 사용을 위한 설치 방법 sudo apt-get install curl HTTP 호출 방법 URL호출은 다음과 같다. curl http://test-api.com HTTP 호출 시 자주 사용하는 옵션은 3가지이다. -d, --data : Post Request시 보낼 데이터를 설정한다. -H, --header : Request시 헤더를 설정한다. -X, --request : 사용할 Request Method 설정한다. EX) GET, POST 💡 -d 옵션을..

기초/Linux 2022.02.03