Java (42) 썸네일형 리스트형 이펙티브 자바 - 6장 열거타입과 애너테이션 int 상수 대신 열거 타입을 사용하라. 상수대신 Enum 을 사용하자. 훨씬 안전하고 강력하다 각 상수를 특정 데이터와 연결하거나 상수마다 다르게 동작하게 할때 생성자나 메서드가 필요하다. switch 문 대신 상수별 메서드 구현을 사용. ordinal 메서드 대신 인스턴스 필드를 사용하라. 열거형에서 몇번째인지를 반환하는 ordinal 메서드를 사용하지말자 .ordinal 은 enum base 자료구조(EnumSet, Enum Map)에서 쓰이기 위해 만들어진 것 필드에 값을 넣어서 사용해주는게 맞다 비트 필드 대신 EnumSet을 사용하라. 과거에는 비트를 이용새 합집합, 교집합 같은 집합 연산을 효율적으로 할 수 있었지만, 비트 결과는 해석하기가 어렵다. 또한, 비트 필드에 포함된 원소를 순회하기.. 이펙티브 자바 - 5장 제네릭 raw type은 사용하지 마라 raw type? 타입 매개변수 가 있을때 제네릭 클랫, 제네릭 인터페이스라 한다. List 이걸 제네릭 타입이라고 한다. 제네릭 타입을 정의 할때 raw type 도 정의 되는데 여기선 List 가 raw type 이다. 매개변수를 쓰지 않고 사용한 경우 이것은 제네릭이 도입 되기전의 호환성을 위해 쓸 수 있는것 왜 사용하면 안될까? 컴파일단에서 에러를 발견하지 못한다. 런타임에서 오류가나서 컴파일러의 검사를 사용하지 못한다. List arrayList = new ArrayList(); 로 제네틱 타입이 없는 경우를 만들었을때 arrayList.add("Test") 를 넣으면 컴파일러가 걸러내지 못한다. 타입 세이프가 없는 셈이된다. 반면에, List arrayList .. 이펙티브 자바 - 4장 클래스와 인터페이스 클래스와 멤버의 접근 권한을 최소화하라 클래스 내부 구현 정보를 외부 컴포넌트로부터 잘 숨겨야 컴포넌트를 잘 설계 했다 할 수 있다. 정보은닉, 캡슐화라 흔히 불린다. public static final 상수 를 제외하고는 클래스에서 어떤 public state 가 있어서는 안된다. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 public 클래스는 가변 필드를 노출해서는 안된다. 멀티스레드 환경에서 문제가 발생할 수 있다. 하지만, package-private 클래스나 private 클래스에서는 public 필드가 오히려 좋을 때가 있다. 내부에서만 동작하기 때문에 변경 가능성을 최소화하라. 불변 클래스는 인스턴스 내부 값을 수정 할 수 없는 클래스다 객체가 생성되고 파괴될.. 이펙티브 자바 - 3장 객체의 공통 메소드 Object에서 final이 아닌 메소드(equals, hashCode, toString, clone, finalize)는 모두 재정의를 염두에 두고 설계되었다. 이 메소드들을 잘못 구현하면 대상 클래스가 일반적인 규약을 준수한다고 가정하고 만들어진 클래스(HashMap, HashSet 등)에서 오동작이 일어날 수 있다. equals는 일반 규약을 지켜 재정의하라 equals 는 일반 규약을 지켜 재정의 해야한다. 재정의 하지 않는 상황 VO 가 아니라 일반 클래스인 경우 VO 여도 두개 이상 만들어지지 않는 다는게 보장되는 상황, 싱글톤 등 재정의 하는 상황 논리적 동치성을 비교할 떄 사용하면 좋다 , 객체가 같은지가 중요한게 아니라 객체 안에 있는 값이 같은게 중요할때 equals를 재정의하려거든 h.. 이펙티브 자바 - 2장 객체 생성과 파괴 생성자 대신 정적 팩터리 메서드를 고려하라 public 생성자보다 static 팩토리 메서드를 만들 수 있는지를 고려해라 상대적인 장단점이 있지만 , 정적 팩토리의 유리한 경우가 많으니 항상 고려해봐야한다 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지 않을 수도 있다. 반환 타입의 하위 타입 객체를 반환할 수도 있다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수도 있다. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다 정적 팩토리 메소드 사용의 장점? 생성자의 이름을 가질 수 있다. 새로운 인스턴스를 생성하지 않고 사용 할 수 있다. 반환 타입에서 하위 객체를 반환 할 수 있다. 생성자에 매개변수가 많다면 빌더를 고려하라. 매개변수가 많다.. 자바 병렬 프로그래밍 - 객체 공유 병렬 프로그램 작성은 상태가 바뀔 수 있는 내용을 어떻게 잘 공유해 사용하도록 관리하는지에 대한 문제라 했다. 2장에서는 멀티 스레드가 동시에 동일한 데이터에 접근하는 것을 막기 위해 synchronization 를 사용하는 방법을 설명했다. 이번 장에서는 여러 개의 스레드에서 특정 객체를 동시에 사용하려 할때 안전하게 동작 하도록 객체를 공유하고 공개하는 방법을 알아보자 Synchronization 에는 메모리 가시성(memory visibillity) 라는 또 다른 중요한 측면이 있다. 특정 변수의 값을 사용하고 있을 때, 다른 스레드가 해당 변수의 값을 접근하지 못하게 막는것 뿐만 아니라, 값이 동기화 블록을 빠져나가고 나면, 다른 스레드가 변경된 값을 바로 쓸 수 있어야한다는 것이다. 적절한 방법.. 자바 병렬프로그래밍 - 스레드 세이프티 병렬 프로그래밍 은 스레드 또는 락에 관련 된 것만은 아니다. 병렬프로그래밍은 스레드와 락을 잘 사용해야 하지만, 이건 그저 목적을 위한 도구 일뿐이다. 쓰레드 세이프 코드를 작성한다는건 핵심적으로는 상태, 특히 공유되고 있는 상태에 대한 접근을 관리하는 것이다. 스레드가 하나 이상 상태 변수에 접근하고, 하나라도 변수에 값을 쓰면 변수에 접근할때 모든 스레드가 동기화를 통해 조율해야 한다. 자바에서 동기화를 위한 기본 수단은 synchronized 키워드로 배타적인 락을 통해 보호 기능을 제공한다. 하지만, volitile 변수, 명시적 락, atomic variable를 사용하는 경우에도 동기화 라고 말한다. 만약 스레드가 변경 할 수 있는 상태 변수를 동기화 없이 접근하면 그 프로그램은 잘못된 것이.. 자바 병렬 프로그래밍 - 소개 운영체제는 여러개의 프로그램을 동시에 실행 할 수 있도록 발전했고, 프로세스마다 메모리, 파일 핸들 , 보안 권한등 자원을 할당한다. - 프로세스 끼리는 소켓, 공유 메모리, 세마포어, 파일로 서로 통신이 가능하다. 리소스 활용, 공정성, 편의성 등의 이유로 동시에 프로세스를 실행시키는 운영체제를 개발 하게 된건데 스레드도 마찬가지 이유로 고안됏다. ( - 리소스 활용: 프로그램은 가끔 인풋 이나 아웃풋 처럼 외부 작동을 기다리고 있어야 하는데, 기다리는 동안 일을 할 수 없다. 그래서 대기 시간 동안 다른 프로그램이 작동하면 효율적일 수 있다. - 공정성 여러 사용자와 프로그램이 컴퓨터 내 자원에 대해 동일한 권한을 가질 수 있음 -편의성: 모든 tasks 를 실행하는 싱글 프로그램을 작성하는것보다 s.. 이전 1 2 3 4 5 6 다음