java (97) 썸네일형 리스트형 [item 1] 생성자 대신 정적 팩터리 메서드를 고려하라 [item 1] 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드는 디자인 패턴에 없다. 생성자 VS 정적 팩터리 메서드 ....... 장점 이름을 가질 수 있다 probablePrime 생성자는 이름이 없다. 매개변수 갯수로 오버로딩되어 구분할 뿐... public class BigInteger { BigInteger(int, int, Random){ ..... } // 생성자 } 정적 팩터리 메서드는 이름만 잘 지으면 반환 될 객체의 특성을 쉽게 묘사할 수 있다. public class BigInteger { BigInteger(int, int, Random){ ..... } // 생성자 void probablePrime( ){.......} // 메서드 선언 } 호출 될 때 마다 인스턴.. [item 17~18] Item9~Item10 AJ Item11~Item12 가을 Item13~Item14 AJ Item15~Item16 김인호 Item17~Item18 민이/워니 Item19~Item20 Jake Item21~Item22 워니/민이 4장 클래스와 인터페이스 item 17 변경 가능성을 최소화하라 클래스는 불변 클래스로 사용해라 불변 클래스가 아니라면 변경 부분을 최소한으로 줄이자 모든 필드는 private final 불변 클래스는 장점이 많다. 단점이라고는 잠재적 성능 저하 객체가 가질 수 있는 상태의 수를 줄이면 그 객체를 예측하기 쉬어지고, 오류 가능성이 낮아진다. 변경해야할 필드를 제외하고 final로 선언하자 모든 필드는 private final이어야 한다 생성자는 불변식 설정이 완료된 초기화가 끝난 .. [java] final 1. final final : 해당 선언이 최종 상태. 결코 수정될 수 없다. final 클래스 final 필드 final 메소드 상속 관련 있음 상속을 못하게 됨 초기값 설정 후 더 이상 값을 변경할 수 없다. 상속 관련 있음 오버라이딩 못하게 됨 2. final class 최종적인 클래스 == 상속할 수 없는 class 부모 클래스가 될 수 없어서, 자식 클래스를 만들 수 없다. public final class Member { ......... } public class 자식클래스이름 extend Member { // Member는 부모가 될 수 없음 .... } 3. final method 최종적인 메소드 == 오버라이딩 안됨 부모 클래스를 상속 받은 자식 클래스에서 final로 된 메소드는 재정.. [java] 상속 상속 부모가 자식에게 물려주는 행위 부모 클래스가 자식 클래스에게 물려줄 수 있다. 무엇을? 멤버, 메소드 부모 클래스의 모든 필드, 모든 메소드 들을 물려 받지 않는다. 못 받는 것도 있다. 어떻게? 부모 클래스에서 priavate로 접근 제한을 갖는 필드, 메소드는 상속 대상에서 제외된다. 자식이 부모를 선택한다. 자식 클래스를 선언할 때 어떤 부모를 상속받을 건지 결정한다. class 자식클래스이름 extends 부모클래스이름 { //필드 //생성자 //메소드 } [java] super, this 1. super가 뭐지? 자식 클래스에서 부모 클래스의 메소드를 오버라이딩하면 부모 클래스의 메소드는 숨겨짐, 자식 메소드만 사용됨 그런데 숨겨진 부모 메소드가 쓰고 싶다면? 그럴땐 super 키워드를 붙여서 부모 메소드를 호출한다. super.부모메소드이름( ); super는 부모 객체를 참조하고 있기 때문에 부모 메소드에 직접 접근할 수 있다. public class Airplane{ public void land(){ System.out.println("착륙합니다"); } public void fly(){ System.out.println("일반 비행"); } public void takeOff(){ System.out.println("이륙합니다"); } } 부모 클래스 Airplane public.. [item 8] finalizer와 cleaner 사용을 피하라 [item 8] finalizer와 cleaner 사용을 피하라 자바 객체 소멸자, finalizer와 cleaner 자바에서는 두 가지 객체 소멸자를 제공한다. 바로 finalizer와 cleaner가 있다. finalizer cleaner finalizer는 예측할 수 없으며, 상황에 따라 위험하므로 일반적으로 불필요하다. 자바 9부터는 finalizer를 deprecated API로 지정하고 대안으로 cleaner를 소개한다. cleaner는 별도의 스레드에서 동작해서 finalizer보다 덜 위험하다고 생각할 수 있다. 하지만, cleaner도 여전히 예측할 수 없으며, 느리고, 일반적으로 불필요하다. 수행시점 수행 여부 조차 보장하지 않는다. 성능도 느림 수행시점 수행 여부 조차 보장하지 않는다.. [item 7] 다 쓴 객체 참조를 해제하라 OutOfMemoryError 본 적 있죠? C, C++ 언어는 명시적으로 메모리를 할당해서 사용하고 자원을 다 사용하고 나면 개발자가 명시적으로 해제를 한다. 가비지 컬렉터를 갖춘 자바와 같은 언어를 사용하면, 가비지 컬렉터가 다 쓴 객체를 알아서 회수한다. 그래서 메모리 문제를 개발자가 전혀 신경쓰지 않아도 된다고 오해할 수 있다. 메모리 누수 현상이 발생하니 null을 입력하라. package com; import java.util.Arrays; import java.util.EmptyStackException; public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_IN.. 11 리액티브 API 개발 11.1~11.2 - 동민 11.3~11.4 - 워니 11.5~12.1 - 초밥 12.2 - 민이 12.3 - 가을 11.1 스프링 WebFlux 사용하기 스프링 프레임워크 WebFlux 리액티트 웹 프레임워크 매 연결마다 하나의 스레드 사용 비동기 웹 프레임워크 적은 수의 스레드로 더 많은 요청을 처리함. 스레드 블록킹 블록킹이 없다. 다중 스레드 이벤트 루핑 한 스레드 당 많은 요청을 처리할 수 있다. 데이터베이스, 네트워크 작업 모든 것이 이벤트로 처리된다. 요청이 처리 될때 스레스 풀 --> 작업 스레드 가져옴 작업 스레드 종료까지 : 요청 스레드 블록킹 됨 비용이 드는 작업이 필요하면 -> 해당 작업의 콜백을 등록 -> 병행으로 수행 -> 다른 이벤트 처리로 넘어감 -> 작업 완료 : 이벤트로 .. 이전 1 ··· 8 9 10 11 12 13 다음