JAVA
-
코딩 규칙 정하기 하루 전JAVA 2024. 12. 18. 00:50
코딩 규칙 정하기에 앞서 코딩 규칙이 필요한 이유을 작성해본다.코딩을 잘한다는 것은?개발이라는 행위는 대부분 특정 조직에서 이윤을 만드는 것이 목적이다. (세상의 문제를 해결한다고는 하지만, 대부분이 돈이 되는 문제를 해결한다)회사 입장에서 개발의 목표는 짧은 리드타임, 큰 경제적 가치 창출이 전부다. (https://yeoon.tistory.com/178)경영자 입장에서 개발 관련해 해야할 일은 너무 쉽다. 분기별 인건비만 잘 관리하면 된다. 개발에서 이윤 아웃풋을 만들기 위한 투입 리소스는 100% "인간"이다.(서버비, 운영비 제외)경영자 입장에서 개발을 잘하는 사람은 기간, 예산에 맞춰 적시에 업무를 완수하는 사람이다.회사 입장에서 코딩을 잘하는 개발자는 요구사항을 짧은 기간 내에 완수하는 사람이..
-
JAVA 함수형 프로그래밍 (1) - Functional InterfaceJAVA/자바공부 2024. 8. 16. 03:31
자바에서 제공하는 함수형 프로그래밍 도구 java.util.function 패키지에 위치한 대표적인 인터페이스 사용법을 정리한다.아래의 기능을 적재적소에서 활용하면 가독성, 유지보수, 확장성이 좋은 코드를 작성할 수 있다. 엄청 많은데 큰 분류로, Function, Functional Interface, Consumer, Supplier, Predicate, Comparator의 사용법을 알면 원시타입용도 인터페이스(박싱 안해서 메모리 덜 사용), 추가 매개변수용도 인터페이스와 같이 구분할 수 있다. 1. Function 인터페이스- 매개변수를 조작해서 반환값을 얻는 용도@Test@DisplayName("Function interface 테스트 - 매개변수가 1개")void step1() { // ..
-
Java Lint 기능을 사용해서 formatting 강제하기JAVA/자바설치 2024. 5. 3. 23:48
1. 배경 클린코드 책을 보면 한 챕터를 formatting(형식)에 관한 이야기를 한다.요약하자면 작성한 소스코드에 formatting(들여쓰기, 줄바꿈, 띄어쓰기 . . . 등등)이 굉장히 중요하다고 한다.formatting이 코드를 읽을때 가독성에 영향을 주고 이는 뇌에 영향을 줘서 생산성에도 영향이 간다.formatting은 아키텍처와 같이 한번 굳어지면 리펙토링이나 변경이 불가능하다. 기존 코드 formatting을 모방해서 작성할 수 밖에 없고, 이를 지키지 않고 여러명이 각자의 style로 작성하게되면 카오스가 되기 때문. 2. 해결책 Linter 그리고 Sonar Lint, Sonar Cubeformatting을 clean하게 유지하기 위해, 개발자들은 강제로 formatting을 정해진 ..
-
sdkman env 사용해서 java, gradle, maven 버전 프로젝트별로 설정JAVA/자바설치 2024. 5. 3. 22:57
sdkman 설치하기 : https://yeoon.tistory.com/80sdkman env를 사용하는 이유결과부터 보면 아래처럼 인텔리제이로 프로젝트를 열기만 했는데, Java vesion, Gradle version을 변경되게 만들 수 있다. Java의 LTS 변경 주기가 빨라지면서, 회사나 개인 프로젝트에 여러 JAVA version를 사용하게 되었다. IntelliJ를 사용하면 버전에 맞는 JDK 다운로드 및 설정을 지원하지만,터미널에서 java 버전이 프로젝트와 맞지 않는 문제가 있다.sdkman env 기능을 사용해서 JDK와 빌드도구의 버전을 자동 설정해서 문제를 해결해보자.sdkman env 사용법1. 프로젝트 root path 위치에서 터미널에 아래의 명령어를 입력하면 .sdkmanrc..
-
[java] CompletableFuture 문법JAVA 2024. 1. 31. 22:14
비동기 프로그래밍 업무중에 @Async 애노테이션이 붙은 메서드 안에 있는 Exception이 동작하지 않은 일이 있었다. 정상화하기 위해 구글링을 하는데, 기본 개념이 부족해서 자료 읽기에 애를 먹었다. 기본 문법을 정리해본다. (문법은 백기선 님의 JAVA 8 강의 내용을 요약했습니다.) 우선 결론부터 JAVA는 스레드를 관리하는 Executor라는 것을 제공. Executor를 이용해 스레드 생성, 작업, 끼어들기, 기다리기, 종료 같은 작업 가능. Future는 스레드 작업을 결과로 return한 값, Future api로 스레드에서 아직 작업중인지 확인, 작업이 끝나서 나온 결과 호출, 멀티스레드 결과 관리 가능 CompleteableFuture는 자바 8에 등장한 Future 확장 기능 Cal..
-
Java Exception Handling (e.printStackTrace())JAVA/자바공부 2023. 10. 20. 01:20
업무 중 코파일럿에 의해 Exception catch문과 e.printStackTrace()가 자동으로 생성되는 일이 있었다.팀장님의 이거 쓰면 안되요! 라는 리뷰가 달렸는데, 왜 안될까?Exception이란 무엇일까? e.printStackTrace의 정체는 무얼까? Exception 정의프로그램 실행중 정상적인 흐름을 방해하는 이벤트일반적으로 Exception이 발생하면 현재 코드 블럭이나 메서드의 동작이 멈춘다.Exception의 역사약 40년 전 최초 프로그래밍 언어에는 Exception이라는 개념이 없었다.C 언어에서는 비정상적인 종료를 알리고자 -1 또는 null을 반환하는 방식으로 동작했다.함수를 호출하고 실수로 -1, null 값 확인을 놓치는 실수들이 속출1985년, C++ 언어가 등장해..
-
자바 LocalDateTime 요일, 오전/오후 한국어로 변경JAVA/자바공부 2023. 8. 3. 19:03
시간을 다룰때 한국어로 변경이 필요한 경우가 있었다. 요일이랑, 오전/오후 변경을 기록한다. (Locale 같은 정보 활용하면 더 쉬운 방법이 있을 것 같은데... ) 요구사항 : 아래의 형식으로 시간 표현 8/3(목) 오전 10시 00분 내가 짠 코드 @Component public class KoreanDateFormatter { private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("a hh시 mm분"); private static final Map DAY_OF_WEEK_KO_MAP = Map.of( DayOfWeek.SUNDAY, "일", DayOfWeek.MONDAY, "월", DayOfWe..
-
(다시 보는) SOLID 원칙이란?JAVA/자바공부 2023. 5. 29. 02:40
1년 동안 많은 것이 변했다. 쌓은 지식도 지식을 쌓은 방법도 변했다. 아마도 그 원인은 1. ChatGPT 등장 2. 절대적인 Code input/output 증가 다시한번 SOLID 원칙에 대해 정리해 본다. SOLID 원칙 전에 객체지향에 대한 복습 객체지향이란? 코드를 데이터(상태-속성)와 기능(함수-행동)으로 객체 정의 객체끼리 메시지로 상호작용하게 하는 코딩 방법 캡슐화, 추상화, 상속, 다형성이 객체지향의 핵심 재사용할 수 있고 확장에 유연한 코드를 작성할 수 있다. 객체지향을 왜 해야할까? 소프트웨어 비용을 줄여서 시장에서 경쟁력을 가질 수 있다. 소프트웨어는 계속 변해서 다음의 비용이 발생한다. 코드 분석 시간 코드 변경 시간 비용을 줄이기 위한 방법으로 객체지향 뿐만 아니라 다양한 선택..