분류 전체보기
-
Error creating bean with name 'org.springframework.validation.beanvalidation. OptionalValidatorFactoryBean#0'스프링부트_에러 2024. 9. 28. 08:15
Error creating bean with name 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0깃에서 다운받은 프로젝트 초기 세팅중 발생한 에러이다.*.jar 버전 이슈같은 설정의 문제이다.pom.xml 버전수정12345dependency> groupId>org.hibernate/groupId> artifactId>hibernate-validator/artifactId> version>5.2.4.Final/version>/dependency>버전 5.2.4.Final이 호환성이 좋다.hibernate-validator를 사용 중이라면 제 경우에는 아래와 같이 종속성을 하나 더 추가.(JA..
-
[이펙티브자바]변경 가능성을 최소화하라_아이템17이펙티브 자바 2024. 6. 26. 00:30
불변 클래스는 가변 클래스보다 설계 및 구현 사용이 쉬우며, 오류가 생길 여지도 적고 안전하다. [불변 클래스를 만들기 위한 5가지 규칙] 1. 객체의 상태를 변경하는 메서드를 제공하지 않는다. 2. 클래스를 확장할 수 없도록 한다. 클래스를 final로 선언하여 상속을 막는다. 3. 모든 필드를 final로 선언한다. 다른 스레드로 건네도 문제없이 동작하게끔 보장하기 위해 필요하다. 4. 모든 필드를 private으로 선언한다. 필드가 참조하는 가변 객체를 클라이언크에서 직접 접근해 수정하는 일을 막아준다. 이외에 public final로만 선언하면 다음 릴리즈에서 내부표현을 바꾸지 못하여 권하지 않는다. 5. 자신 이외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 클래스에 가변 객체를 참조하는..
-
[이펙티브자바]public클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라_아이템16이펙티브 자바 2024. 6. 5. 20:03
[예제1] 퇴보한 클래스는 public이면 안 된다.class Point { public double x; public double y; }데이터 필드에 직접 접근 가능해 캡슐화하지 못한다. 이렇게 사용하지 않고 public을 private으로 바꾸고 접근자(getter)를 추가한다. [예제2] 접근자와 변경자(mutator)메서드를 활용해 데이터를 캡슐화한다.class Point { private double x; private double y; public Point(double x, double y){ this.x = x; this.y = y; } public double getX() {return x;} public double getY() {return y;} public void setX(do..
-
[이펙티브자바]클래스와 멤버의 접근 권한을 최소화하라_아이템15이펙티브 자바 2024. 5. 31. 20:58
잘 설계된 컴포넌트는 내부 구현을 완벽히 숨겨, 구현과 API를 분리한다. [정보은닉의 장점] 1. 시스템의 개발 속도를 높인다. => 여러 컴포넌트 병렬 개발 가능하다. 2. 시스템 관리 비용 낮춘다. => 코드 파악 용이하여 디버깅 가능하고 컴포넌트 교체 용이하다. 3. 성능 최적화에 도움을 준다. => 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화 가능하다. 4. 소프트웨어 재사용을 높임. => 외부 의존 없이 동작가능한 컴포넌트라면 낯선 환경에서도 유용하게 사용될 가능성 크다. 5. 큰 시스템을 제작하는 난이도 낮춰줌. => 시스템 전체 완성 전, 개발 컴포넌트의 동작 검증 가능하다. [기본 원칙] 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다. => 외부에서도 사용하려면 pub..
-
[이펙티브자바]Comparable을 구현할지 고려하라_아이템14이펙티브 자바 2024. 1. 18. 20:49
[Comparable 인터페이스의 compareTo] 1. compareTo는 Object메서드가 아니다. 2. compareTo는 단순 동치성 비교와 순서까지 비교할 수 있고, 제네릭하다. 즉, Comparable을 구현했다는 것은 클래스의 인스턴스에 자연적인 순서가 있어서 구현한 객체들의 배열을 손쉽게 정렬할 수 있다. Arrays.sort(a);검색, 극단값 계산, 자동 정렬되는 컬렉션 관리도 쉽게 할 수 있다. 예제 코드는 종족을 제거하고 알파벳순으로 출력한다. [Comparable 예제]public class WordList { public static void main(String[] arg) { Set s = new TreeSet(); Collections.addAll(s, args); Sy..
-
[이펙티브자바]clone 재정의는 주의해서 진행하라_아이템13이펙티브 자바 2024. 1. 15. 06:17
Cloneable 인터페이스는 Object의 protected메서드인 clone의 동작 방식을 결정한다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 복사한 객체을 반환하여, 그렇지 않은 클래스의 인스턴스에서 호출하면 CloneNotSupportedException을 던진다. Cloneable의 경우 상위 클래스에 정의된 protected메서드의 동작방식을 변경할 것이다. 실무에서 Cloneable을 구현한 클래스는 clone 메서드를 public으로 제공하며, 사용자는 당연히 복제가 제대로 이뤄지리라 기대한다. [Object 명세] 이 객체의 복사본을 생성해 반환한다. 객체 x에 대해 다음 식은 참이다. x.clone() != x //참이다. x.clone(..
-
[이펙티브자바]toString을 항상 재정의하라_아이템12이펙티브 자바 2024. 1. 10. 21:27
1. 모든 하위 클래스에서 이 메서드를 재정의 해야 한다. toString을 잘 구현한 클래스는 사용하기 훨씬 편하고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다. 작성한 객체를 참조하는 컴포넌트가 오류 메시지를 로깅할 때 자동으로 호출할 수 있다. => toString을 제대로 재정의하지 않는다면 쓸모없는 메세지만 로그에 남을 것이다. 좋은 toString은 (특히 컬렉션처럼) 이 인스턴스를 포함하는 객체에서 유용하게 쓰인다. [예제] map객체 출력(toString 안했을 시): {jenny=PhoneNumber@adbbd} map객체 출력(toString 했을 시): {jenny=010-1234-5678} 한 눈에 봐도 사용하기 수월하게 출력할 수 있다. 2. toString은 그 객체가 가진 주..