69 예외는 진짜 예외 상황에만 사용하라 예외는 (그 이름이 말해주듯) 오직 예외 상황에서만 써야 한다. 절대로 일상적인 제어 흐름용으로 쓰여선 안 된다. 잘 설계된 API라면 클라이언트가 정상적인 제어 흐름에서 예외를 사용할 일이 없게 해야 한다. 70 복구할 수 있는 상황에서는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 자바는 문제 상황을 알리는 타입(throwable)으로 검사 예외, 런타임 예외, 에러, 이렇게 세 가지를 제공한다. 각 방식을 언제 사용할지 참고할 수 있는 지침들을 살펴보자. 호출하는 쪽에서 복구하리라 여겨지는 상황이라면 검사 예외를 사용하라. → 메서드 선언에 포함된 검사 예외 각각은 그 메서드를 호출했을 때 발생할 수 있는 유력한 결과임을 API 사용자에게 알려주..
57 지역변수의 범위를 최소화하라 지역변수의 범위를 줄이는 가장 강력한 기법은 ‘가장 처음 쓰일 때 선언하기’다. 거의 모든 지역변수는 선언과 동시에 초기화해야 한다. 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다. *try-catch문은 이 규칙에서 예외다. 변수를 초기화하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화해야 한다. 지역변수 범위를 최소화하는 마지막 방법은 메서드를 작게 유지하고 한 가지 기능에 집중하는 것이다. 반복문에서는 반복 변수의 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이의 괄호 안으로 제한된다. for (Element e : c) { ... // e로 무언가를 한다. } for (Iterator i = c.it..
49 매개변수가 유효한지 검사하라 오류가 발생한 즉시 잡아내지 못하면 해당 오류를 감지하기 어려워지고 감지하더라도 발생 지점을 찾기 어려워진다. 메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘못된 값이 넘어왔을 때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다. 매개 변수 검사를 제대로 하지 못하면 다음과 같은 문제가 생길 수 있다. 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 메서드가 잘 수행되지만 잘못된 결과를 반환할 수 있다. 메서드는 문제없지 수행됬지만 어떤 객체를 이상한 상태로 만들어놓아서 예상할 수 없는 시점에 이 메서드와 관계 없는 오류를 낼 수 있다. *public과 protected 메서드는 매개변수 값이 잘못됐을 때 전디는 예외를 문서화해야 한다.(보통은 Il..

42 익명 클래스보다는 람다를 사용하라 Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); 위 코드는 문자열을 길이순으로 정렬한다. 이 때, 정렬을 위한 비교 함수로 익명 클래스를 사용한다. 익명 클래스 방식은 코드가 너무 길기 때문에 함수형 프로그래밍에 적합하지 않아 보인다. 위 코드를 람다로 바꾼 모습을 살펴보자. Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length())); 여기서 람다, 매개변수, 반환값의 타입은 각각 ..

34 int 상수 대신 열거 타입을 사용하라 정수 열거 패턴은 타입 안전을 보장할 방법이 없으며 표현력도 좋지 않다. 비교되는 단점 수은(mecury)과 수성(mecury)를 동시에 사용해야할 경우 각각 이름을 달리 설정해야한다. 컴파일하면 그 값이 클라이언트 파일에 그대로 새겨지기 때문에 상수의 값이 바뀌면 클라이언트도 반드시 다시 컴파일해야 한다. 문자열로 출력하거나 디버거로 살펴보면 단순히 숫자로만 보이기 때문에 도움이 되지 않는다. 위 문제점을 해소할 수 있는 열거 타입은 아래와 같이 사용한다. public enum Apple {FUJI, PIPPIN, GRANNY_SMITH} public enum Orange {NAVEL, TEMPLE, BLOOD} 열거 타입은 클래스 밖에서 접근할 수 있는 생..
26 raw type은 사용하지 말라 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면 이를 제네릭 클래스 혹은 제네릭 인터페이스라 한다. 예를 들어 List은 원소의 타입이 String인 리스트를 뜻하는 매개변수화 타입이다. 여기서 String이 정규 타입 매개변수 E에 해당하는 실제 타입 매개변수다. 제네릭 타입을 정의하면 그에 딸린 raw type도 함께 정의된다. raw type이란 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않을 때를 말한다. 예를 들어 List의 raw type은 List다. raw type은 타입 선언에서 제네릭 타입 정보가 전부 지워진 것처럼 동작하는데, 제네릭이 보편화되기 전 코드들과 호환되도록 하기 위한 궁여지책이라 할 수 있다. 오류는 가능한 즉시, 컴파일할 때 발..
아이템 15 클래스와 멤버의 접근 권한을 최소화하라 정보 은닉의 장점 시스템 개발 속도를 높인다. 시스템 관리 비용을 낮춘다. 성능 최적화에 도움을 준다. 소프트웨어 재사용성을 높인다. 큰 시스템을 제작하는 난이도를 낮춘다. * 시스템을 구성하는 컴포넌트들을 서로 독립시켜서 개발, 테스트, 최적화, 적용, 분석, 수정을 개별적으로 할 수 있게 해준다. 정보은닉을 위한 다양한 장치 중 하나인 접근제어를 사용하는 기본 원칙은 모든 클래스와 멤버의 접근성을 가능한 좁히는 것이다. 클래스의 공개 API를 세심히 설계한 후, 그 외의 모든 멤버는 private로 만들자. 아이템 16 public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 public 클래스라면 위 방식보다 아래 방식을 지향하도..
아이템10, equals는 일반 규약을 지켜 재정의하라 equals는 논리적 동치성을 확인해야할 때 재정의한다. *논리적 동치성 비교(equals)란 참조 타입(Reference Type) 변수를 비교하는 것이다. 더 정확히 말하면 비교할 핵심 값을 정하고, 핵심 값을 비교하여 두 객체가 서로 동등(equal)하다면 "논리적으로 같다"라고 한다. (https://javanitto.tistory.com/9) equals 메서드를 재정의할 때는 반드시 일반 규약을 따라야 한다. 다음은 Object 명세에 적힌 규약이다. 반사성(reflexivity): null이 아닌 모든 참조 값 x에 대해, x.equals(x)는 true다. 대칭성(symmetry): null이 아닌 모든 참조 값 x, y에 대해, x...
- Total
- Today
- Yesterday
- spring boot jenkins
- nginx to 내장톰캣
- GitHub
- nginx to springboot tomcat
- github webhook jenkins
- CI/CD
- slack
- 스프링부트 자동배포
- nginx 내장톰캣 설정
- nginx to tomcat
- nginx 내장톰캣 연결
- 젠킨스 자동 배포
- 토이프로젝트 회고
- nginx 톰캣 설정
- HTML
- 깃허브 웹훅 젠킨스
- springboot
- oracle
- java.lang.AbstractMethodError
- webhook
- 오라클 계정 오류
- 국비 프로젝트
- oracle.jdbc.driver.T4CConnection.isValid(I)Z
- springboot jpa
- 스프링부트 젠킨스
- 오라클
- spring boot
- github webhook
- 젠킨스 웹훅
- jenkins webhook
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |