일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스
- 스프링공부
- JPA 공부
- K8S
- 기술면접공부
- Axon framework
- Flutter
- 자바공부
- 플러터 개발
- JPA공부
- nestjs스터디
- 코테공부
- 알고리즘공부
- 스프링 공부
- JPA
- 기술공부
- 자료구조공부
- JPA스터디
- 스프링
- 플러터 공부
- 코테준비
- 카프카
- DDD
- querydsl
- nestjs
- JPA예제
- 스프링부트공부
- 스프링부트
- Kafka
- nestjs공부
- Today
- Total
목록Language (93)
DevBoi
예외 전파란, 상위 계층으로 예외가 전달 될때마다 새로운 예외에 포함시켜 다시 던지는 과정이다. 예외 체이닝, 예외 래핑이라고 불리기도 한다. 예외 전파는 다른 계층으로 예외가 전달 될때, 새로운 예외를 던지는 것을 예외 전파라고 한다. 예외 전파를 하는 목적은 , 첫 예외 부터 전파되는 과정을 통해 거치는 예외들을 보존하기 위해서이다. 예외 전파를 통해 stack trace를 쌓고 예외가 어디서 부터 어떤 과정을 거쳐 전달 됬는지 확인할 수 있다. 해당 두개의 클래스에서 Exception 처리를 한다. Service 클래스에서 get에 대한 SQLException 처리를 하고있고, Main에서는 Service에 대한 걸 이어 받아, Exception을 노출한다. 즉 1. Service에서 발생하는 Ex..
예외란, 입력한 값에 대한 처리가 불가능 하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름을 어긋나는 것을 말한다. 예외 상황을 미리 예측하여 핸들링 할 수있다. 에러는 시스템에 무엇인가 비정상적인 상황이 발생한 경우에 사용된다. JVM에서 발생시키며, OOM, ThreadDeath,StackOverflowError 등이 존재한다. 예외 처리 방법에는 예외복구, 예외 처리 회피, 예외 전환 방법이 있다. -예외 복구 예외 상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법이다. 예외를 잡아서 일정 시간, 조건만큼 대기하고 다시 재시도를 반복한다. 최대 재시도 횟수를 넘기게 되는 경우 예외를 발생시킨다. -예외처리 회피 예외 처리를 직접 담당하지 않고 호출한쪽으로 던..
프로그램에서 미리 정해놓아야할 값들, 상수값들이 존재할때 사용한다. 특정 enum에 대한 값을관리할 수도있고 클래스로 빼서 생성자를 호출해서, 값을 지정, 저장 할 수도 있다. 상수를 해당 과 같이 정의 한다고 가정해보자 메인에서는 각 상수 타입별로, 할당된 값을 가지고 사용하면 되기 떄문에, 타입이 변경되거나, 로직이 변경된다고 해도, 값이 변경되지 않아도 된다. 또한 타입에 대한 별도 if 로직을 작성하지 않아도 된다. 이런 방식으로, 해당 값에 대한 배열 형태로 가져와서 출력 할 수도있고 해당 상수에 대한 별도 메서드를 만들어서 뿌려줄 수도 있다. 무튼, 특정 상수에 대해서 미리 정의 해놓고, static 하게 값을 관리할 수있다. 또한 추상 메서드를 기점으로, 위와 같이 개발 로직을 설계할 수도있..
자바 8에서 추가된 Optional과 Stream에 대해서 공부를 해보자 공부 관련 실습해보기 전에 간단하게 특징 및 장단점을 정리해보자 -특징 Java를 이용해 함수형 프로그래밍할 수있게 API를 제공해준다. 장점 원본의 데이터에 변경없이 가공할 수있다. 메서드체이닝을 통해 가공이 가능, 코드량을 줄이고 간결하게 표현이 가능하다. 병렬처리가 가능하다, 쓰레드를 이용해 많은 요소를 빠르게처리 가능 단점 함수형 프로그래밍이 너무 많아지면, 다수의 개발자가 운영 및 관리에 어려움이 따를수 있음(함수형 프로그래밍은 자바 표준 개발 방식이 아니라 익숙하지 않은 개발자들이 존재할수 있음) 생성하기 배열 / 컬렉션 / 빈 스트림 Stream.builder() / Stream.generate() / Stream.it..
옵저버 패턴은 간단하게 얘기하면, 어떤 객체의 상태가 변할 때 그와 연관된 객체 들에게 알림을 보내는 디자인 패턴이다. 쉽게 얘기하면, Badi의 상태가 변할때 마다 notifyCrew를 호출, 해당 크루는 객체에서 가지고 있는 Crew원의 리스트를 업데이트 해준다. 메인에서는 배디를 크루원들이 구독하여, 구독자와 발행자의 관게를 맺게 된다. 주로 분산/이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하고 발행자의 상태가 변경되면 구독자들에게 해당 값을 전파하는 방식이다. 옵저버 패턴은 한 객체의 상태가 바뀌면, 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 단, 설계는 느슨한 결합으로 하는 것이 좋다. 두 객체..
팩토리 패턴 : 간접적으로 객체를 생성해준 후에 반환해주는 역할이다. * 장점 생성할 클래스를 미리 알지 못해도 팩토리 클래스가 객체 생성 담당한다. 객체의 자료형이 하위클래스에 의해서 결정 -> 확장 용이성 동일한 형태로 프로그래밍 가능 확장성 있는 전체 프로젝트 구성가능 * 단점 객체가 늘어날때 마다 하위클래스 재정의로 인한 불필요한 많은 클래스 생성 가능 쉽게 말하면 하나의 인터페이스를 여러 클래스가 상속 받는 다고 가정하자 shape interface를 여러 객체가 상속을 받는다면 해당 클래스로 하게되면 하나의 호출로, 여러개의 객체 호출을 할수 있다. 관련 클래스 다이어 그램이다. 하나의 인터페이스를 여러개의 클래스에서 받아서 객체생성은 팩토리에서 전담 하는 것이다. 마무리 장점 * 객체 생성하..
롬복의 동작원리는 간단히, 컴파일 시점에 바이트 코드를 변환하여 원하는 부분을 주입해주는 방식이다. 과정으로 자세히는 1. 자바 컴파일러는 소스파일을 파싱하여 AST트리를 만든다. 2. Lombok은 AnnotationProcessor에 따라 AST 트리를 동적으로 수정, 새노드를 추가하고 마지막으로 바이트 코드를 분석 및 생성한다. 3. 최종적으로 자바 컴파일러는 Lombok Annotation Processor에 의해 수정된 AST를 기반으로 Byte Code를 생성한다. Annotation Processor Lombok의 의존성을 추가할때 해당 키워드란, 자바 플러그 인의 일종으로, 어노테이션에 대한 코드베이스를 검사, 수정 생성하는 훅이다. 컴파일 에러나, 경고를 내기도하고 소스코드와 바이트코드를..
Enum이란? 기존 상수를 표현할때는 해당 클래스 내부에 final static String, final static int 와 같이 정의했으나 가독성의 문제로 인해 Enum이 등장하였다. Enum은 Enumeration으로 열거형이라고 불리고, 연관된 상수들의 집합을의미한다. Enum클래스는 컴파일 시점에 모든 값에 대해 알아야하고, 고정된 상수들의 집합이여야 한다. 또한 다른 패키지나 클래스에서 해당 타입에 접근해서 동적으로 어떤 값을 정해줄 수 없다. 또한 클래스로 정의를 하기 때문에 정해진 값에 대한 신뢰있는 메소드를 사용하여, 값을 재조정 및 얻어서 사용할 수 있다. ex. MyEnum.toString() -> 별도 오버라이딩 등등
싱글턴 패턴이란 -전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조 할 수 있도록 하는 패턴 하나의 인스턴스만 생성하여, 모든 클라이언트들에게 동일한 인스턴스를 반환한다. 생성자를 private으로 하고, 클라이언트에서는 해당 생성된 인스턴스를 사용하여 처리한다. 다중 스레드에서 Printer클래스를 이용할때 인스턴스 1개 이상 생성되는 경우가 발생할 수 있다. 경합 조건에서 두개의 쓰레드가 null을 체크후에 진행이 된다면, 동시에 두개의 인스턴스가 생성이 될 수도 있다. 1) static 변수로 인스턴스를 만들어서, 초기화 하는 방법 static 변수 객체가 생성되기 전 클래스가 메모리에 로딩될때 만들어져서 초기화가 한번만 실행된다. 메소드 영역에 메모리가 ..
리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드와 타입 그리고 변수들을 접근 할수 있도록 해주는 자바 API 이다. 런타임에 지금 실행되고 있는 클래스를 가져와서 실행해야하는 경우 동적으로 객체를 생성하고 메소를 호출하는 방법 클래스,인터페이스,메소드 들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다. -컴파일 타임 타입검사가 주는 이점을 누릴수 없다. -리플렉션을 이용하면 코드가 장황해지고 지저분해진다. -성능이 떨어진다. (리플렉션을 통한 메서드 호출은 일반 메서드 호출보다 훨씬 느리다.) 쉽게말하면, 특수한 시스템을 만들때는 강력하나, 컴파일 타임에서 명확한 객체를 사용하지 못해 독이 될수 있다. 따라서 되도록이면 인스턴스 생성에만 리플렉션을 쓰고..