애정코딩 💻

나만 어려운 예외처리

개발 하면서 당연한 부분이였지만 나에겐 새롭게 다가왔던 예외처리 ... ㅜ 리뷰 해주시는 매니저님이 너무 잘 알려주셔서 정리 해봅니다 ( 격한 감사 🥹 ) 소제목이 연관되어 이어지지는 않고 상황마다 예외처리 했던 부분을 메모했습니다. 예외 발생 시 조치를 못하는 경우 & 관리하지 못하는 경우 POINT * 발생할만 곳 에서 catch 후 메시지를 적는다. (예외상황을 정확히 서술한다) * 언체크예외로 변경한다. 예외를 잡지 못하면 자바에서는 해당 정보를 자동으로 출력합니다. 하지만 실패원인을 분석할 때 볼 수 있는 정보는 스택정보일 경우가 많기 때문에 log 로 예외를 관리하고 있다면 실패 원인에 관한 정보를 가능한 많이 담아 반환하여 추적하기 쉽도록 하는게 중요합니다! 1. 발생한 예외에 대한 모든 값..

WEB/JAVA 2022.05.19 Joana

Enum Type 에서 Function Interface 활용

회사 코드를 분석하다가 함수형인터페이스를 활용한 부분이 있어서 공부해보았다. 사용한 목적은 해당 EnumType 을 사용하면 그 Enum에 맞게 배열을 정렬했습니다. 신선한 충격을 받았습니다 ..ㅎ.. 그래서 저도 간단하게 구현해보고 공부해봤습니다! package com.example.demo; import java.util.function.Function; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum ItemType { AA("생수",CalRatio::getRatio), BB("음료",CalRatio::getRatio), CC("과자",CalRatio::get..

WEB/JAVA 2022.04.01 Joana

Test-Driven-Development 테스트 주도 개발

TDD 개발 방식 TDD 는 테스트 코드를 작성한 뒤에 실제 코드를 작성하는 것이다. 테스트가 통과된 코드만을 실제 코드로 작성한다 -> 버그가 줄고 소스가 간결해지며 설계가 개선된다. - 설계 단계에서 프로그래밍 목적을 미리 정의한다. - 무엇을 테스트해야 할지 미리 정의한다. - 테스트 코드 작성 도중 발생하는 예외 사항을 테스트 케이스에 추가한다. (설계 개선) TDD 프로세스 실패하는 작은 단위 테스트 추가 -> 테스트 통과, 최소한의 코딩 -> 구현 설계 개선, 중복 제거, 리팩토링 , 테스트 통과 유지 좋은 테스트의 특징 Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다. Independent: 각각의 테스트는 독립적이며 서로 의존해서는 안된다. Repeatable: 어느 환경에서..

WEB/JAVA 2022.03.24 Joana

Java 8 Interface - default 메서드, static 메서드

Java 8 이후로 interface에 대한 정의가 몇가지 변경되었다. 상황 이미 만들어져 있는 Interface 에 기능을 추가 하고 싶다. 하지만 이 Interface를 implemnets 받고 있는 class 모두가 이 기능의 구현체를 생성해야만 한다. default 메서드 인터페이스가 default 키워드로 선언되면 메서드를 구현할 수 있게 된다. -> 구현체들은 오버라이딩이 가능하다. package com.example.demo; public interface UserService { String getName(Long userId); int getAge(Long userId); /** * @implSpec 이 구현체는 주소를 반환한다. * @param userId * @return */ // ..

WEB/JAVA 2022.03.23 Joana

[MapStruct] 내가 찾아 쓰려고 정리한 글

🏃‍♂️ 계속해서 업데이트 하기 🏃‍♂️ 1. 공식문서 2. 왜 사용할까? 3. 동작방식 4. 의존성 5. Mapper Inteface 작성 6. Mapper 구현체 살펴보기 공식문서 https://mapstruct.org/documentation/stable/reference/pdf/mapstruct-reference-guide.pdf MapStruct 왜 사용할까? 보통 DB에서 데이터를 조회하고 서비스단에서 로직을 설계 하기 위해 Entity -> Dto , Dto -> Entity 작업을 하게 되는데 이러한 Mapping 작업을 해주는 라이브러리가 많이 존재한다 그중 아래의 링크를 확인해보면 MapStruct 퍼포먼스가 빠른 것을 확인할 수 있다. https://www.baeldung.com/j..

WEB/JAVA 2022.03.16 Joana

[Lombok] Difference Between @Value and @Data

컴파일과정에서 생성해 주는 방식으로 동작하는 java라이브러리입니다. @Value 기본적으로 불변객체로 만들어준다. class에 선언하면 아래의 어노테이션이 기본적으로 포함된다. @Getter @AllArgsConstructor @ToString @EqualsAndHashCode @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) 하지만 @Setter 는 포함되지 않는다. 왜냐하면 기본적으로 불변성을 보장하기 때문에 setter를 생략하는 것은 당연하다 @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) 는 private이나 final 을 사용할 수 있게 해준다. 최종적으로 @Value ..

WEB/JAVA 2022.03.11 Joana

내가 보려고 정리하는 JAVA 멀티 스레드 5- 스레드풀

스레드풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다. 병렬 작업 처리가 많아지면 스레드 개수가 증가되는데 그에 따른 스레드 생성, 스케줄링으로 인해 CPU가 바빠져 메모리 사용량이 늘어난다. 따라서 애플리케이션의 성능이 저화 되므로 스레드 풀을 사용하여 스레드 전체 개수가 늘어나지 않도록 해야한다. 스레드풀 생성 public class ExecutorExample { public static void main(String[] args) { // 1개의 스레드를 사용하는 스레드풀 생성 ExecutorService singleThread = Executors.newSingleThreadExecutor(); // 스레드를 제한 없이 사..

WEB/JAVA 2021.10.06 Joana

내가 보려고 정리하는 JAVA 멀티 스레드 4- 데몬 스레드, 스레드 그룹

데몬 스레드 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드입니다. 그렇기 때문에 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료됩니다. 적용 예로는 자동 저장, 가비지 컬렉터 등이 있는데 이 기능들은 주 스레드가 종료되면 같이 종료됩니다. 데몬 스레드 내용을 작성해준 후 public class DaemonThread extends Thread{ public void save(){ // 자동 저장 } public void run(){ save(); } } 메인 스레드에서 setDaemon 을 해주면 된다. public class mainThread(){ public static void main(String[] args){ DaemonThread daemonThread = new Dae..

WEB/JAVA 2021.10.06 Joana

내가 보려고 정리하는 JAVA 멀티 스레드 3- 스레드 상태

스레드는 실행대기 상태와 실행 상태를 번갈아가면서 자신의 run() 메서드를 조금씩 실행합니다. 그 후 더이상 실행할 코드가 없을 때 종료 상태가 됩니다. 스레드 객체 생성 -> start() -> 실행대기(스케줄링으로 인해) 실행 -> 종료 - 스레드 스케줄링으로 선택된 스레드가 cpu를 점유하고 run() 메서드를 실행한다 (실행 상태) - 스레드 스케줄링에 의해 다시 실행대기 상태로 돌아갈 수 있다.(실행대기 상태) 어떻게 제어할까? 1. 주어진 시간동안 일시 정지 sleep() 실행 중인 스레드를 일정 시간 멈출 수 있게 한다. Thread 클래스의 정적 메서드인 sleep() 을 사용한다. Thread.sleep(1000) // 1초 -> 밀리세컨드 (1/1000) 단위 * 주어진 시간이 되기전..

WEB/JAVA 2021.10.05 Joana

내가 보려고 정리하는 JAVA 멀티 스레드 2 - 동기화 메서드와 동기화 블록

동기화 메서드와 동기화 블록 멀티스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있다. 스레드a가 사용하던 객체를 b에 의해 상태가 변경 될 수 있어서 a가 의도했던 결과와 달라질 수 있기 때문에 사용중인 스레드의 작업이 끝날 때까지 객체에 잠금을 걸어 다른 스레드가 사용할 수 없도록 해야 한다. 단 하나의 스레드를 실행하는 임계 영역을 만들어주면 된다. -> 스레드가 객채 내부의 동기화 메소드 또는 블록에 들어가면 즉시 객체에 잠금을 걸어 다른 스레드가 영역에 있는 코드를 실행하지 못하도록 한다. 메서드 실행 종료 되면 잠금이 풀린다. 사용방법은 아래와 같다 public synchronized void method(){ // 임계 영역 } 일부 내용만 만들고 싶다면 아래와 같이 블..

WEB/JAVA 2021.09.28 Joana

내가 보려고 정리하는 JAVA 멀티 스레드 1 - 멀티스레드 개념

멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 볼 수 있다. 멀티 스레드는 다양한 곳에서 사용된다. 1. 대용량 데이터의 처리 시간을 줄이기 위해 데이터를 분할해서 병렬로 처리하는 곳에서 사용 2. UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용 3. 다수 클라이언트의 요청을 처리하는 서버를 개발할 때 - 메인 스레드 메인 스레드가 작업 스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이면 프로세스는 종료되지 않는다. - 작업 스레드 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성한다. (작업1) (작업2) (프로그램에서 병렬로 실행할 작업을 결정) -> 메인스레드 스레드1 스레드2 Thread클..

WEB/JAVA 2021.09.13 Joana

객체 지향 프로그래밍 - 객체, 캡슐화

인프런 객체 지향 프로그래밍 입문 - 최범균를 공부하며 적은필기 노트입니다. 직접 실전에서 Java를 쓰게 되면서 객체 지향 프로그래밍에 중요성이 뼈를 강타했다... 공부하자! "Software maintenance is not keep it working like before it is keep being useful in a changing world" - Jessica Kerr 유지보수는 그대로를 관리하는 것이 아니라 유용하게 변경하는 것이다. 그러므로 분석과 수정이 빠르게 되어야 한다. 비용과 변화 낮은 비용으로 변화할 수 있어야 한다. 1. 패러다임 객체 지향, 함수형, 리액티브 등 2. 코드, 설계, 아키텍처 DRY, TDD, SOLID, DDD, ... 클린 아키텍처, MSA, ... 3. ..

WEB/JAVA 2020.12.05 Joana