Java 29

[ Java ] 불변객체

불변 객체 (Immutable Object) 가변 객체는 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태가 변경 가능한 객체이다.(ex ArrayList, HashMap, StringBuilder, StringBuffer ) 그 반대로, 불변 객체는 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태를 변경할 수 없는 객체이다. 불변 객체는 멀티 스레드 환경에서도 안전하게 사용할 수 있다는 신뢰성을 보장하며, 대표적인 불변 객체로 String 등이 존재한다. 이외에도 프로그래머가 커스텀 객체를 생성하여 내부 상태가 변경되지 않게 만들면, 그것도 불변 객체가 된다. 불변 객체 사용시 장점 1. 쓰레드에 안전하여 멀티 쓰레드 환경에서 동기화를 고려하지 않아도 된다. 2. 불변객체를 필드..

Java 2023.01.20

[ Java ] 정적 팩토리 메서드 (Static factory method)

스프링 강의를 듣다가 강사님께서 생성자를 static of 를 사용해서 만드는 모습을 보고 관심이 생겨 찾아본 결과 정적 팩토리 메서드라는 것이 있었다. 나는 자바를 배울 때 생성자를 통해 객체 생성하는 방법을 배웠고 후에 따로 공부하며 빌더를 통한 객체 생성에 대해 알게 되었다. 그런데 정적 팩토리 메서드를 통해 생성하는 방법은 처음 봐서 신선하게 다가왔고, 굳이 static 메서드로 감싸서 생성자를 사용하는 이유가 궁금하여 공부해보았다. 먼저 정적 팩토리 메서드가 뭘까. public User(int userId, String name, String email) { this.userId = userId; this.name = name; this.email = email; } public static v..

Java 2022.12.22

[ Java ] Checked Exception, Unchecked Exception

요즘 jpa를 공부하고 있는데 트랜잭션 부분에서 Checked Exception과 Unchecked Exception에서의 동작이 달라, 이 기회에 자바의 Exception에 대해 자세히 알아보고 싶어 공부하게 되었다. 예외에 대해 알아보기 전에 먼저 에러에 대해서도 알아야 한다. 에러 (Error) 는 치명적인 오류이다. 에러가 발생했다는 것은 시스템이 종료되어야할 수준의 상황으로 JVM 실행에 문제가 생긴 것이다. 개발자가 미리 예측하여 방지할 수 없으며 예시로 메모리 부족, 스택 오버플로우 등이 있다. 예외 (Exception) 개발자가 구현한 로직에서 발생한 실수이다. 사용자의 잘못된 입력이나 사용에 의해 발생할 수 있고 개발자가 예측하여 미리 방지할 수 있다. 예외가 발생하면 프로그램은 바로 종..

Java 2022.12.04

[Java] Optional

스트림을 공부하며 Optional의 존재를 알게되었고, 최근에 스트림 없이 Optional을 활용하는 코드를 보고, Optional을 단독으로 활용할 수 있구나! 를 깨닫게 되어 공부해보았다. 자바 토이프로젝트를 할 때 일일이 if !=null을 사용하여 코드를 방어했었다. 이렇게 null 체크를 하게되면 코드가 지저분하고 길어지며 가독성이 매우 떨어진다. 이를 Optional을 사용하면 null체크를 직접 하지 않아도 되면서, 명시적으로 해당 변수가 null일 수도 있다는 가능성을 표현할 수 있다. Optional이란? Optional은 "존재할 수도 있지만 안 할 수도 있는 객체", 즉 "null이 될 수도 있는 객체"를 감싸고 있는 일종의 래퍼 클래스이다. Optional 객체 생성 Optional..

Java 2022.12.02

[Java] 함수형 인터페이스

Enum의 활용도를 공부하다 CALC_A(value -> value) 이런식으로 함수형 인터페이스가 사용될 수 있다는 사실을 알게었고, 함수형 인터페이스가 다양하게 활용될 수 있을 것 같은데 나는 기본적인 것도 잘 모르는 것 같아 이를 공부해야겠다는 생각이 들었다. 함수형 인터페이스란? 추상메서드 단 하나만 존재하는 인터페이스를 함수형 인터페이스라고 한다. @FunctionalInterface interface MyFunction{ public abstract int max(int a, int b); //public abstract 는 생략가능 } 이렇게 직접 만들 수 있으며 @FunctionalInterface 어노테이션이 필수적인건 아니지만, 이것을 붙여주면 추상메서드가 두 개 이상 들어가는 것 등의..

Java 2022.12.02

[ Java ] Enum

Enum은 배울 때는 후루룩 배우지만 프로젝트를 할 때는 꽤나 많이 사용되는 존재 인 것 같아서 다시 공부해보고 싶었다. 그래서 Enum이 어떻게 사용되고, 어떻게 활용할 수 있는지를 알아보고 실습해보았다. 공부하기 전 Enum 코드의 유지보수를 위해서 같은 종류끼리 모아놓은 상수 집합?(근데 이제 클래스 처럼 사용가능한..) 같은 이미지였다. 밑의 코드 처럼만 사용해 왔었음 @AllArgsConstructor @Getter public enum Developer { FRONT_END(1, "프론트"), BACK_END(2,"백엔드"), FULL_STACK(3, "풀스택"), NON_DEV(4,"non"); private final int value; private final String korean; ..

Java 2022.11.23

[Java] Arrays.asList 와 List.of

Array를 List로 변환하기 위해서 Arrays.asList , List.of 둘다 사용가능하다. 스트림을 공부하면서 여러 코드를 보는데 Arrays.asList , List.of 모두 많이 사용하는 것 같아서 둘이 어떤 차이가 있고, 어떨때 자주 사용하는지를 공부해보려고 한다. 1. Null 허용 Arrays.asList() O List.of() X List list = Arrays.asList(1, 2, null); // OK List list = List.of(1, 2, null); // X List.of()를 통해 객체가 반환될 때, 내부적으로 파라미터들에 대한 null체크를 하고 null이 있으면 NullPointerException이 발생한다. 2. 변경 가능 Arrays.asList() ..

Java 2022.11.17

[Java] MultiValueMap이란

스프링 강의를 듣다가 강사님께서 mutiValueMap을 사용하시는데 나는 처음보는거라 궁금해서 찾아봤다. hashmap, treemap, linkedhashmap이 있는데 왜 이들을 사용하지 않고 mutiValueMap을 사용하셨던걸까?? 일단 기존에 알고있었던 3가지 Map부터 정리해보자 1. HashMap key, value 쌍으로 데이터를 저장한다. 데이터를 조회할때 key값을 통해 데이터를 가져온다. 저장위치를 해쉬함수를 통해 바로 알 수 있기 때문에 검색이 빠르다. 2. TreeMap HashMap과 동일한 기능을 가지고 있고, 추가로 데이터가 들어올때마다 key값에 따라서 자동 정렬된다. 3. LinkedMap HashMap과 동일한 기능을 가지고 있고, 데이터의 입력 순서를 저장하고 있다...

Java 2022.11.17

[Java] 스트림

정의 컬렉션이나 배열의 원소를 흐름으로 간주하는 것. 저장원소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 내부 반복자 내부반복자이기 때문에 이미 함수가 구현되어있다. 따라서 어떻게 요소를 반복시킬 것인가는 컬렉션에 맞겨두고 개발자는 요소처리코드만 집중적으로 구현 가능하다. 객체를 통해 "무엇"을 할 것인지를 중심적으로 생각해야 한다. 스트림 종류 BaseStream - 모든 스트림에서 사용할 수 있는 공통 메소드 정의, 코드에서 직접 사용하진 ❌ Stream - 객체 요소 처리 스트림 IntStream - int 요소 처리 스트림 LongStream - long 요소 처리 스트림 DoubleStream - double 요소 처리 스트림 컬렉션 스트림 얻기 public static void st..

Java 2022.10.31

토이프로젝트 후 느낀점

프로젝트 주제 스마트스토어 운영진을 위한 고객 분류 프로그램 개발 개별 프로젝트 👤 유의사항 해당 프로젝트는 클래스 및 메소드 설계를 직접 해보는 것이 목적이므로 List, Set, Map과 같은 API의 사용은 금합니다. List, Set, Map의 내부를 분석해보고 이와 비슷하게 직접 함수를 작성해보세요. 고객 분류 결과 General VIP VVIP 고객 분류기준 분류기준은 무조건 총 이용시간과 결제금액으로 정의하고 각 그룹이 되기 위한 최소 이용시간과 결제금액은 해당 프로그램을 사용하는 운영진에게 입력받는 형태입니다. 받은 피드백 Git Commit 커밋의 단위는 최대한 잘게 쪼개는 것이 좋습니다. 커밋의 단위를 나눠서 해주신 부분 매우 좋습니다!!조금더 욕심을 부려보자면 더 잘게 쪼갤 수 있을 ..

Java 2022.10.29