정적 팩터리 메서드의 경우 클래스의 인스턴스를 생성하는 전통적인 public 생성자의 대안으로 사용가능하다.해당 메서드는 클래스 내부에 정의된 정적 메서드로, 인스턴스를 생성하고 반환하는 역할을 한다.명확한 이름을 가질 수 있다.생성자보다 더 의미있는 이름을 가질 수
정적 팩토리와 생성자에는 동일한 제약이 있다고 한다.둘다 선택적 매개변수가 많은 경우 적절하게 대응하기가 어렵다고 한다.예를 들어..영양정보를 표현하는 클래스가 있는 경우영양정보에는 여러가지 필수 사항 + 여러가지 선택 사항이 존재한다.해당 방식을 점층적 생성자 패턴(
싱글톤이란?인스턴스를 오직 하나만 생성할 수 있는 클래스를 의미한다.전형적인 예시함수무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트가 예시가 될 수 있음.문제점클래스를 싱글톤으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있다.싱글
정적 메서드와 정적 필드만 담은 클래스주로 기본 타입 값이나 배열 관련 메서드들을 모으는 용도로 사용한다유틸리티 클래스java.lang.Math, java.util.Arrays, java.util.Collections 등이 있다.final 클래스상속을 방지하고 정적 메
클래스가 하나 이상의 자원에 의존하는 경우, 자원의 직접 명시 말고 의존 객체 주입(Dependency Injection, DI ) 를 사용하라고한다.static final 같은 정적 유틸리티로 설정하는 경우, 유연하지 않고 테스트하기가 어려워진다.필드에서 final
똑같은 기능의 객체를 매번 생성하기보다, 객체 하나를 재사용하는 것이 낫다.불필요한 객체의 생성해당 코드의 경우 실행될 때마다 새로운 String 인스턴스를 만든다.개선전자의 예시의 경우 매번 새로운 인스턴스를 만든다.대신 해당 예시의 경우 하나의 String 인스턴스
C 나 C++ 같은 언어에서는 메모리를 직접 관리합니다.다만, Java 같은 언어는 GC 가 존재하기에, 메모리를 관리하지 않아도 자동으로 처리를 해줍니다.GC 에서 컨트롤하지 못하는 인스턴스 등에 대해서는 메모리 누수(memory leak) 이 발생할 수 있으며,성능
Object 의 equals 는 각 인스턴스가 오직 자기 자신과만 같게 구현되어 있음.일반적으로 equals 의 경우 제대로 알고 사용하지 않는 경우 함정이 곳곳에 위치하기에 주의해야한다.각 인스턴스가 본질적으로 고유한 경우값을 표현하는 것이 아니라, 동작하는 개체를
equals 를 재정의한 클래스는 반드시 hashCode 도 재정의해야한다.Object 의 일반 규약을 준수하기 위함이며, 이를 지키지 않으면 HashMap 이나 HashSet 같은 컬렉션에서 문제를 일으킨다.논리적으로 같은 객체는 같은 해시코드를 반환해야 한다.Pho
컬렉션 순회법전통적인 for문반복자와 인덱스를 사용하면 코드가 지저분해진다잘못된 변수를 선택하여 사용할 가능성이 높아진다.컴파일러가 잘못된 변수를 잡아주지 못한다.컬렉션과 배열의 순회 코드 형태가 달라진다.코드가 깔끔해지고 오류가 줄어든다.컬렉션과 배열을 동일한 방식
일정 개수의 상수 값을 정의한 타입이다.ex사계절, 태양계의 행성, 카드 게임의 카드 종류 등이 있다.타입의 안정성이 부족하다.타입 혼동으로 인한 오류 기능표현력 부족서로 다른 그룹의 상수끼리 비교가 가능하다.이름의 충돌접두어 사용으로 이름 충돌을 방지해야한다는 문젝
스트림은 자바에서 함수형 프로그래밍 패러다임을 도입한 중요한 기능이다.스트림에서는 부작용(side effect) 없는 함수를 사용해야함.스트림(Stream)데이터의 연속적인 흐름을 의미한다.컬렉션이나 배열 등의 데이터 소스로부터 생성된다.변환(transformation
과거 자바 8 등장 전에는 함수 객체 생성시 주로 익명 클래스를 사용함.익명 클래스는 이름이 없는 클래스로생성자로 객체 생성 후 객체 안의 public 메서드를 재정의가 가능한 클래스이다.코드가 상당히 장황하다.자바 8 부터 람다식으로 도입해 코드 간결 + 가독성 증대
표준 명명 규칙을 준수하라소문자로 시작할것camelCase 사용동사 또는 동사구로 시작의미있고 설명적인 이름을 사용약어 사용을 자제특수문자 사용금지(언더스코어 → - 제외 )이해하기 쉽고 일관성이 있는 이름을 사용개발자 커뮤니티에서 널리 받아들여지는 이름을 선택긴 이름
Java 8 이전의 특정 조건에서 값을 반환할 수 없는 경우예외 던지기null 반환 (객체 참조 케이스의 경우)2가지가 존재했다.하지만 2가지 방식보다 문제가 있었고, 자바8 에서 Optional 이라는 새로운 선택지가 추가되었다.예외예외는 진짜 예외적인 상황에서만 사
에서 배열이 비어있는 경우에 단순히 null 을 반환하는 코드가 있다고 생각해보자.클라이언트에서 null 값에 대해 처리하는 추가적인 코드를 작성해야한다.방어 코드를 빼먹는 경우 오류가 발생할 수 있는데,객체가 0일 가능성이 거의 없는 상황에서는 수년 후에나 오류가 발
기본 타입int, double, boolean참조 타입String, List박싱된 기본 타입각 기본 타입에 대응하는 참조 타입이 있음int → Integerdouble → Doubleboolean → Boolean식별성(IDENTITY)기본 타입 : 값만 가진다래퍼 타
반복자, 인덱스 변수로 인해 코드의 복잡성이 증가된다.오류 가능성이 증가함반복자는 3번, 인덱스는 4번 등장하는 등..배열은 인덱스 순회, 컬렉션은 반복자 순회로각 자료 타입마다 순회 방식이 달라는 문제장점코드가 간결오류 가능성 감소컬렉션이나 배열모두에 적용이 가능함.
여러 스레드가 실행 중인 경우 작동한다.스레드의 실행 시간과 순서를 결정한다.정상적인 OS : 공정한 스레드 실행을 보장하지만구체적인 스케줄링 정책은 사실 OS 마다 상이할 수도 ㅣㅇㅆ다.그래서..스레드 스케줄러 정책에 의존하는 프로그램을 짜는 것은 노노플랫폼 간의 이