JAVA/Java
-
IllegalStateException VS IllegalArgumentExceptionJAVA/Java 2022. 2. 13. 18:39
예외 처리를 부분을 작성하면서 IllegalStateException과 IllelgalArgumentException의 차이는 무엇인지, 어떤 상황에서 사용해야하는 지 궁금해졌다. IllegalStateException Signals that a method has been invoked at an illegal or inappropriate time. In other words, the Java environment or Java application is not in an appropriate state for the requested operation. 자바 정규 문서를 보면 적절하지 않거나 유효하지 않은 시간대에 메소드가 불러졌을 때 발생하는 예외로 정의되어있다. 즉, 죽은 쓰레드로 부터 불려지는..
-
Java 8 StreamJAVA/Java 2022. 1. 14. 12:09
자바 8부터 지원하는 Stream은 컬렉션, 배열 등에 대해서 요소들을 하나씩 참조하여 반복적 처리를 하는 기능이다. 스트림은 내부 반복을 통해서 작업을 처리하기 때문에 for문을 사용하는 것 보다 간결하게 식을 표현할 수 있다. Stream 스트림의 특징은 다음과 같다. 원래의 데이터를 읽기만 할 뿐 기존 데이터를 변경하지 않음 일회성이므로 재사용이 불가능하다. 필요하다면 정렬된 결과를 반환하도록 한다. (스트림의 생성을 반복적으로 이용하면 연속적으로 사용할 수 있다) 스트림 생성, 중개연산, 최종연산 의 구조를 지니고 있다. ( 스트림생성().중개연산().최종연산() ) 병렬 스트림은 여러 쓰레드가 작업한다. (parallelStream()으로 병렬 스트림 작성 시 parallelStream().fi..
-
자바에서 Scanner.nextInt() 후 nextLine() 입력받지 못할 때JAVA/Java 2022. 1. 10. 18:12
Scanner를 이용해서 입력을 받으려고 할 때 nextInt()후 nextLine()을 이용하여 입력받지 못하고 끝나버리는 경우가 발생했다. 이러한 문제는 nextInt()는 개행문자(엔터 '\n') 전까지 숫자를 입력 받는 데 이후 개행문자 까지 입력을 받는 nextLine()을 사용하게 되면 버퍼에 남아있는 개행문자 하나만 입력을 받은 후에 메소드가 종료되기 때문에 발생 한다. 해결방안 public class InputView { private static final Scanner sc = new Scanner(System.in); public InputView() { } public static int inputPrice() { System.out.println("구입 금액을 입력해 주세요.");..
-
자바에서 메소드 순서JAVA/Java 2022. 1. 10. 18:04
프로젝트 리팩토링을 진행하면서 코드를 작성할 때, 변수와 메소드 순서에 대해서 작성하는 방법을 배웠다. 전체적인 순서 public class LottoResult { // static 변수 private static final int LOTTO_PRICE = 1_000; private static final int LOTTO_MATCH_MINIMUM_BOUND = 3; // instance 변수 private Map result = defaultResult(); private BigDecimal yield; // constructor public LottoResult(final List matchResult) { setResult(matchResult); } // 메소드 private Map defaul..
-
Java Optional의 사용JAVA/Java 2022. 1. 6. 19:37
런타임에 발생하는 객체없음(NullPointException)을 방지하기 위해서 java8 부터는 함수형 언어를 이용해서 존재하지 않을 수 도 있는 값이라는 Optional 타입을 만들어냈다. 그러나 Optional의 사용에는 주의해야 할 점 이 26가지나 존재하므로 유의해서 사용해야 한다. Optional Card card = cardRepository.findById(1).orElseThrow(new IllegalException("Card not found with id: " + 1)) Optional은 null이 될 수도 있는 값을 가진 객체를 감싸는 Wrapper 클래스 로 반환할 결과 값이 null(없음)임을 명백하게 표현할 필요가 있지만 null반환시에 에러가 발생할 가능성이 높은 곳에서 제..
-
자바에서 static의 사용JAVA/Java 2021. 12. 30. 21:18
프로젝트 리팩토링을 진행 중 자바에서의 static메서드를 가진 utility 클래스의 사용은 자제해야 한다는 코드 리뷰를 받게 되었다. 자바에서의 static의 사용 public class FileUploadUtils { //폴더에 사진을 저장 public static void saveFile(String uploadDir, String fileName, MultipartFile multipartFile) throws IOException { ... } //폴더에 파일이 이미 존재한다면 폴더 비워주기 public static void cleanDir(String dir) throws IOException { ... } //폴더 삭제하기 public static void deleteDir(String d..
-
Method Reference (Java 8)JAVA/Java 2021. 12. 19. 13:01
Method Reference 는 람다식을 더 간결하게 표현하기 위한 방법이다. Method Reference 메소드 레퍼런스에는 3가지 방법이 존재한다. 정적 메소드 참조 (Static Method Reference) 인스턴스 메서드 참조 (Instance Method Reference) 생성자 참조 (Contructor Reference) 정적 메소드 참조 List fruits = Arrays.asList("apple", "banana", "kiwi"); //람다식 표현 fruits.forEach(fruit -> StringUtils.capitalize(fruit)); //메소드 레퍼런스 표현 fruits.forEach(StringUtils::capitalize); //출력 결과 Apple Banan..
-
Refactoring ① : 첫번째 예제JAVA/Java 2021. 12. 17. 11:20
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=339765 Refactoring 리팩토링은 소프트웨어의 외부 기능을 변경하지 않으면서 내부 구조를 바꾸는 기술이다. 리팩토링을 사용하면 나쁜 디자인의 코드를 취해서, 외부 기능을 변경하지 않고, 좋은 디자인의 코드로 www.aladin.co.kr 기존의 코드 public class Movie { public static final int CHILDRENS = 2; public static final int REGULAR = 0; public static final int NEW_RELEASE = 1; private String _title; private int _priceCode; public Movie(Str..