사이드 프로젝트를 진행하면서 무심하게 Objects.equals() 메서드를 사용했었고 코드 리뷰를 받으면서 파라미터 두개의 타입이 Enum이면 == 비교 연산자를 사용하는게 어떤지 질문 받았다.Objects.equals(newUser.getSocial(), existingUser.getSocial());파라미터값 두개를 동시에 비교하려고 Objects.equals()를 무심하게 사용했었다.NPE(NullPointerException)를 방지하는 목적으로 비교하기 위해서 사용했었는데 생각없이 사용한 자신을 반성하고 왜 == 비교 연산자에 대해서 이야기 하셨는지 Objects.equals(), enum의 equals(), == 비교 연산자에 대해서 Test 해보면서 알아보려고 한다. 테스트에서 사용하는 ..
생성자와 정적 팩터리는 매개변수가 많을 때 적절히 대응하기 어렵다. public class NutritionFacts { private final int servingSize; // 필수 private final int servings; // 필수 private final int calories; // 선택 private final int fat; // 선택 private final int sodium; // 선택 private final int carbohydrate; // 선택 public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate ) { this.servingSize ..
객체를 생성하는 방법 public 생성자 public 클래스 이름 () { } 정적 팩터리 메서드 (Boolean에서 사용하는 정적 펙터리 메서드) 디자인 패턴에서의 팩터리 메서드와 다르다. public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); } 생성자 말고 정적 팩터리 메서드를 썻을 때 장점과 단점을 알아보자 장점 1. 이름을 가질 수 있다. 이름을 통해서 반환될 객체의 특성을 쉽게 묘사할 수 있다. 생성자, 정적 팩터리 메서드 중에서 “값이 소수인 BigInteger를 반환한다.”라는 뜻을 명확하게 표현하는지 생각해보면 이름의 장점을 얻을 수 있다. public BigInteger(int bitLength, int certain..
JVM(Java Virtual Machine) 자바 가상 머신 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어입니다. OS에 종속받지 않고 CPU가 Java를 인식하고 실행할 수 있게 하는 가상 컴퓨터라고 말합니다. Java Compiler가 .java 파일을 .class 파일 즉, 바이트 코드(JVM이 이해하는 명령어 집합)로 만들면 이 코드가 자바 가상 머신 환경에서 실행되면서 OS에 종속받지 않게 됩니다. 언어 마다 사용할 수 있는 방법은 다르겠지만 Java 뿐만 아니라 .class 파일을 통해서 JVM를 사용하는 언어들이 있습니다. Java Compiler의 javac 명령을 통해서 .class 파일을 생성할 수 있습니다. .class 파일을 ja..
var가 타입을 추론해 준다는 것은 알고 있었지만 부정적인 의견들이 많아 정적 언어인 자바에서는 자주 안 쓰는구나 하고 말았었는데 최근 코드 리뷰를 받으면서 이야기가 나오게 되었고 알고 안 쓰는 거랑 잘 모르는데 안 쓰는 건 차이가 있다고 생각이 들어 정리해 보고자 작성하게 되었습니다.지역 변수 타입 추론Java 10부터 지역 변수에 대한 Type Inference가 가능한 var 키워드를 제공해줍니다. var는 변수를 선언과 초기화가 동시에 일어날 때 타입을 생략할 수 있으며, 컴파일러가 타입을 추론합니다. 문자열 변수에 정수를 할당하니 컴파일 에러가 나오는것을 볼 수 있었습니다.컴파일 시점에 var에 들어갈 타입을 추론하고 바이트 코드에는 추론된 타입이 들어가기 때문에 런타임 오버헤드가 생기지 않습..