모르지 않다는 것은 아는것과 다르다.

Java 22

직렬화

개요 자바에서 직렬화란 개념을 아주 가볍게 알고 있었다. 또한 종종 캐시를 사용할 때 Serializable 인터페이스를 구현해 본 경험이 있다. 하지만 어떤 경우에 써야하는지 명확히 알지 못해 이번 기회에 개념을 잡아 보려고 한다. 직렬화란? 자바에서 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술을 말한다. 또한, 역직렬화란 바이트로 변환된 데이터를 다시 객체로 변환하는 기술을 말한다. 정리하면, JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환하여 JVM으로 상주시키는 형태를 직렬화, 역직렬화라고 한다. 직렬화가 필요한 경우 JV..

Java 2022.05.30

@SuppressWarnings

@SuppressWarnings 란? 컴파일러 경고를 사용하지 않도록 설정해주는 기능이다. intellij 에서 노란색으로 경고 표시줄이 나타나는 경우 그 경고표시를 무시할 수 있다. 대신 주석으로 그 이유를 명시해 주는 것이 좋다. 두 가지의 종류를 같이 사용할 때는 @SuppressWarnings({"unused", "unchecked"})처럼 객체 형식으로 묶어서 사용한다. 속성 all : 모든 경고 cast : 캐스트 연산자 관련 경고 dep-ann : 사용하지 말아야 할 주석 관련 경고 deprecation : 권장되지 않는 기능과 관련된 경고 fallthrough : switch문에서 break 누락 관련 경고 finally : 반환하지 않는 finally 블럭 관련 경고 null : null..

Java 2022.05.30

ENUM 활용

개요 enum 을 자주 사용했지만, 꼭 필요한 경우와 장점을 확실하게 설명하지 못했다. 그래서 오늘 enum 에 대해서 좀더 자세히 공부하고 정리해 보려고 한다. enum 을 사용하지 않았을 경우와 사용했을 경우를 비교해 보면서 enum 에 대해서 알아보자. 기존 코드 private void validateCreateDeveloperRequest(Developer developer, Integer experienceYears) { if (developer.getDeveloperLevel() == "junior" && experienceYears > 4) { throw new DMakerException(LEVEL_AND_EXPERIENCE_YEARS_NOT_MATCH); } if (developer.ge..

Java 2022.03.14

Method Reference

Method Reference 기존에 이미 선언된 메소드를 지정하고 싶을 때 사용한다. :: 오퍼레이터를 사용한다. 생략되는 부분이 많기 때문에 사용할 메소드의 매개변수의 타입과 리턴 타입을 미리 숙지해야한다. Method Reference 의 4가지 케이스 ClassName::staticMethodName (클래스의 static Method 를 지정할 때) ObjectName::instanceMethodName (선언된 객체의 instance method 를 지정할 때) ClassName::instanceMethodName (객체의 instance method를 지정할 때) ClassName::new (클래스의 constructor를 지정할 때) ClassName::staticMethodName (클래..

Java 2022.03.06

LazyEvaluation,Curry,IntStream

Lazy Evaluation Lambda의 계산은 그 결과값이 필요할 때가 되어서야 계산된다. 이를 이용하여 불필요한 계산을 줄이거나 해당 코드의 실행 순서를 Lazy Evaluation 의도적으로 미룰 수 있다. public class LazyEvaluation { public static void main(String[] args) { // 경우 1. if (or(returnTrue(), returnFalse())) { System.out.println("true"); } // 경우 2. if (lazyOr(() -> returnTrue(), () -> returnFalse())) { System.out.println("true"); } } public static boolean or(boolean ..

Java 2022.03.06

함수형 인터페이스

함수형 인터페이스란 아래와 같이 추상 메소드를 딱 하나만 가지고 있는 인터페이스 public interface RunSomething { void doIt(); // abstract 가 생략된 것이다. } static void printName(){ System.out.println("이름"); } default void printAge(){ System.out.println("28"); } static 메소드나 default 메소드의 유무와는 상관없이 추상메서드가 1개이면 함수형 인터페이스이다. SAM (Single Abstract Method) 인터페이스 @FuncationInterface 애노테이션을 가지고 있는 인터페이스 람다 표현식 위에서 정의한 RunSomething 인터페이스를 람다를 사용하..

Java 2022.02.26

제네릭

제네릭 자료형 제네릭 자료형이란? -> 클래스에서 사용하는 자료형이 여러개 일수 있고, 그 기능은 동일한 경우 클래스의 자료형을 특정하지 않고 일반화한 다음 추후 해당 클래스를 사용할 때 지정 할 수 있도록 선언 java 5 부터 지원되었다. 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그램 방식이다. 컬렉션 프레임워크에서 많이 사용된다. 예시는 아래와 같다. public class GenericPrinter { private T member; public void setMember (T member){ this.member = member; } public T getMember(){ return member; } }public class test { public static v..

Java 2022.02.26

접근 지정자

접근 지정자 개요 java 접근 지정자 private, default, protected, public 에 대해서 알아보려고 한다. private, default, protected, public 비교 public : 어떠한 클래스든 접근이 가능하다. protected : 상속받은 클래스 또는 같은 패키지에서만 접근이 가능하다. default : 자신 클래스 내부와 같은 패키지 내에서만 접근이 가능하다. private : 같은 클래스 내에서만 접근이 가능하다. 접근영역 : public > protected > default > private 코드 예시 public package com.pack; class A { public int data = 40; } package com.pack.test; clas..

Java 2022.02.26