목록Programming Language (59)
이야기박스
Item 85. 자바 직렬화의 대안을 찾으라보안에 매우 취약함자바 직렬화란?- 자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)을 아울러서 이야기합니다.- 시스템적으로 이야기하자면 JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태를 같이 이야기합니다. - 참고 - 역직렬화를 하는순간 컴퓨터는 폭팔할 예정static byte[] bomb() { Se..
비지니스 로직단순 CRUD 말고 관리자 도구 만들어 봅시다.==> 관리용 필드 추가 필요 (아래 예시에서의 Level)* 사용자 레벨 추가하는 경우int 필드 사용 ===> enum 필드 사용 // int 사용시, 범위가 넘어서는 에러가 발생할 수 있음 setLevel(1000)public enum Level { BASIC(1), SILVER(2), GOLD(3); @Getter private final int value; Level(int value) { this.value = value; } public static Level valueOf(int value) { switch (value) { case 1: return BASIC; case 2: return SILVER; case 3: return ..
Item 78. 공유 중인 가변 데이터는 동기화해 사용하라동기화- 프로그램 일관성 제공- 스레드간 통신 역할==> "동기화는 배타적 실행뿐 아니라 스레드 사이의 안정적인 통신에 꼭 필요하다" Thread.stop ==> 사용 금지--> 다른 스레드를 멈출때는 boolean 값을 이용 하자 boolean 사용할 때는 그냥하면 최적화되버려서 동작 안할 수도 있음- synchronized를 걸기- volatile 사용할 것( * volatile 주의할 점 --> 책에 있는 내용 참조할 것 '++' 연산 조심 ; safety failure)- Atomic*** 사용할 것 (이게 젤 좋은것 같음) 가장 좋은 방법은 가변 데이터는 공유하지 말자불변 데이터만 공유하던가 Item 79. 과도한 동기화는 피하라과도한 동..
Item 69. 예외는 진짜 예외 상황에만 사용하라예외처리가 성능이 좋을 거란 기대는 하지 말자!---> 예외는 정말 예외처리가 필요한 경우에만 사용할 것 (일반적인 제어용으로 사용하지 말 것) Item 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라?? Item 71. 필요 없는 검사 예외 사용은 피하라검사 예외를 던지는 대신 옵셔널을 반환하자옵셔널로 충분한 처리가 힘든 경우에 검사 예외를 던지자 ==> API 활용이 쉬워진다. Item 72. 표준 예외를 사용하라IllegalArgumentException 허용하지 않는 값이 인수로 건네졌을 때IlegalStateException 객체가 메서드를 수행하기에 적절하지 않은 상태일 때NullPointerExcept..
item 57. 지역변수의 범위를 최소화하라선언과 동시의 초기화 할 것scope를 잘 생각하고 할 것메서드를 작게 유지하고 한가지 기능에 집중할 것 item 58. 전통적인 for 문보다는 for-each 문을 사용하라실수 여지를 줄여줌 for-each 단점- 파괴적인 필터링 --> 자바8부터는 Collection.removeIf() 사용 가능- 변형 --> 바꾸려면 인덱스가 필요- 병렬 반복 --> 여러 컬렉션 병렬로 순회가 힘듬 (인덱스를 엄격히 관리하며 해야 함) for-each ==> Iterable 인터페이스를 구현한 객체라면 무엇이든 순회 가능 item 59. 라이브러리 익히고 사용하라표준 라이브러리 사용 장점- 코드 작성한 전문가 지식 & 다른 프로그래머의 경험 활용 가능- 핵심적인 일과 크..
Item 49. 매개변수가 유효한지 검사하라매개변수에 어떤 제약 변수가 있을지 생각해보자. 그리고 메서드 초기 단계에서 검사해보자Item 50. 적시에 방어적 복사본을 만들라원본이 아닌 복사본을 사용할 것 --> Date 예복사본을 통한 방어적인 행동이 힘들다면? --> 문서를 잘 남기도록 합시다Item 51. 메서드 시그니처를 신중히 설계하라- 메서드 이름은 신중히- 편의 메서드를 너무 많이 만들지 맙시다- 매개변수 목록은 짧게 유지할 것 (4개 이하)- 매개변수 타입은 클래스보다는 인터페이스가 좋음Item 52. 다중정의는 신중히 사용하라다중정의는 어지간하면 피하자 특히 가변인수 사용할 경우, 다중정의 하지 말 것다중정의 하고 싶으면 --> 메서드 이름을 다 다르게 하자Item 53. 가변인수는 신중..
Item 42. 익명 클래스보다는 람다를 사용하라자바 컴파일러의 타입 추론은 제네릭 --> 이걸 잘 못쓰면 람다에서 타입 추론이 안됨==> 제네릭 중요하다 람다 쓸때는 코드는 간결하게람다 세 줄 넘지 말자 (저자) 람다는 함수형 인터페이스에서만 사용됨추상 클래스의 인스턴스만들 때, 람다 사용 불가 --> 익명 클래스 사용해야 함public class Driver { @Test public void abstractAnonymousDriver() { System.out.println(new TestAbstract() { @Override public String testAbstractMethod() { return "testAbstract"; } }); } @Test public void abstractLa..