finalfinal : 값의 재할당을 막는다(불변과는 다르다)(ex. List 의 경우 final 선언을 해도 값이 변할 수 있다) 보통 service 클래스를 주입받아서 사용할 때 final 을 자주 접하였을 텐데, 함수 파라미터 앞에는 왜 final 을 붙이는 걸까? 매개변수의 재할당 금지매개변수의 재할당을 금지하기 위해서이다 예를 들어보자 int plusMethod1(int x) { x = x + 10; return x; } int plusMethod2(final int x) { // 매개변수의 재할당 금지 int result = x + 10; return result; } plusMethod1( ) 은 매개변..
Java/Java 기본
record 란?기존 코드package number.study;import lombok.Getter;@Getterpublic final class practice { private final String name; private final int age; public practice(String name, int age) { this.name = name; this.age = age; }} record 사용 코드package number.study;public record practice(String name, int age) {} 레코드를 사용하면 위의 코드가 아래의 코드로 변하게 된다 레코드는 보일러 플레이트 코드를 제거하기 위해 등장했다(위의 클래스..
의존관계 역전의 법칙 (Dependency Inversion Principle)1. 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.2. 추상화는 세부사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다. 의존관계 역전의 법칙을 잘 적용하게 되면 우리는 하위 모듈의 변경에 의해 상위 모듈이 영향을 받지 않도록 구현할 수 있다 단순 '추상화에 의존해야 한다'로만 DIP 를 이해해서는 안된다'상위 모듈은 하위 모듈에 의존해서는 안된다' 라는 내용 역시 적용해야 진정한 DIP 를 적용하는 것이라 할 수 있다 그렇다면 과연 상위 모듈과 하위 모듈이 뭘까? 모듈모듈이란 전체 소프트웨어 시스템을 작은 단위로 쪼개 놓은 것,작은 단위로 서로 긴밀하게 연관관계가 ..
@Datapublic class Member { private Long id; private String name; private int age;} 우리가 자주 마주하는 코드들이다 그런데 우리가 자주 보는 이 코드들이 항상 id 값(보통 PK) 의 타입을 long 이 아니라 Long 으로 주는 것을 알 수 있다 왜 굳이 Wrapper 클래스인 Long을 사용하는 걸까 그에 대한 이유는 null을 사용할 수 있기 때문이다 만약 id 필드의 타입을 long 타입으로 설정한 경우 id 의 default value 는 0이 된다id 의 기본값이 0 이라는 것은 문제를 초래한다id 에 '값을 선언하지 않아서 0인 경우'와 '값을 0으로 선언한 경우' 를 구분할 수 없게 된다 하지만 Wrapper ..
우리가 흔히 쓰는 오버라이딩과 캐스팅은 어떤 원리로 작동이 되는지 의문이 생겼다. 일단 내가 의문을 가진 상황을 먼저 2가지 보여주고 시작하겠다. 기초 설정public class Parent { public void commonMethod() { System.out.println("Parent -> commonMethod"); }} public class Child extends Parent{ @Override public void commonMethod() { System.out.println("Child -> commonMethod"); } public void onlyChildMethod() { System.out.println(..
클래스객체를 생성하면 참조값 주소가 반환된다. Parent parent = new Parent();new Parent() : 객체 생성, 주소값 반환 -> 메모리에 실제 객체 생성 parent : 반환되는 주소값 저장 -> 실제 객체에 접근 가능 인스턴스 : 특정 클래스로부터 생성된 객체 클래스에는 public 과 default 만 허용된다.(생략 시 default 사용) 하나의 자바 파일에 public 클래스는 하나만 등장 가능하다. 다형성한 객체가 여러 타입의 객체로 취급될 수 있는 것.. 메서드 오버라이딩과 변수public class Parent { String type = "parent"; void method1() { System.out.println("Pa..