본문 바로가기

자바10

객체는 인터페이스를 사용해 참조하라 cf) Item.51 : 매개변수 타입으로 클래스가 아닌, 인터페이스를 사용하라 → 객체는 클래스가 아닌 인터페이스로 참조하라로 확장 적합한 인터페이스만있다면 매개변수뿐 아니라, return, 변수, 필드를 전부 인터페이스 타입으로 선언하자 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 인터페이스를 타입으로 사용하는 습관은 프로그램을 훨씬 유연하게 만들어 준다 // Good Set sonSet = new LinkedHashSet(); Set sonSet = new HashSet(); //유연하게 변경가능 // Bad LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하면 이후 구현 클래스를 교체할 때 새 클래스의 생성자(혹은 다른 .. 2022. 5. 15.
문자열 연결은 느리니 주의하라 String + String 에서의 + : 문자열 연결 연산자는 여러 문자열을 하나로 합쳐주는 편리한 수단 단 한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열을 표현할 때만 사용하자 문자열은 불변이기 때문에 두 문자열을 연결할 경우에는 양쪽의 내용을 모두 복사해야하므로, 문자열 연결 연산자를 통한 문자열 n개의 연산은 O(n^2)이다. 예시 // 청구서의 item을 전부 하나의 문자열로 연결하는 메서드 // 문자열 연결을 잘못 사용한 예 - 아이템이 많아지면 많아질수록 성능저하 public String statement() { String result = ""; for (int i = 0; i < numItems(); i++) { result += lineForItem(i); } return r.. 2022. 5. 15.
박싱된 기본 타입 vs 기본 타입 Java Data Type 기본 타입 : int , double, boolean .. 참조 타입 : String, List ... 기본 타입과 참조 타입의 차이에 대해서 설명해주세요 더보기 1. 각 타입에 따라 저장되는 값이 다르다. A. 기본 타입 - 변수에는 실제 값이 저장된다. B. 참조 타입 - 배열, 열거, 클래스, 인터페이스를 이용해서 선언된 변수는 메모리 주소 값을 가지게 된다. 2. 해당 값이 저장되는 위치 A. 기본 타입 - Stack B. 참조 타입 - Heap 기본 타입과 박싱된 기본 타입의 차이에 대해서 설명해주세요 더보기 기본타입 : int, double , boolean ... 박싱된 기본 타입 : Integer, Double , Boolean ... 차이점 기본 타입은 값만 .. 2022. 5. 14.
마커 인터페이스(Marker Interface) 마커 인터페이스 : 아무 메서드도 선언되어있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시하는 인터페이스 ex) Serializable : 자신을 구현한 클래스의 인스턴스는 ObjectOutputStream을 통해 Write(Serialization)이 가능하다는 것을 알려줌 마커 어노테이션이 등장하면서 마커 인터페이스는 구식이 되었다고들 얘기하지만, 사실은 그렇지 않다. # 마커 인터페이스의 장점 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있으나, 마커 어노테이션은 그렇지 않다. 마커 인터페이스는 어엿한 타입이므로, 마커 어노테이션을 사용했다면 런타임 때 발견될 오류를 컴파일 타임에 잡을 수 있다. ObjectOutputStream.writeObjec.. 2022. 3. 20.
클래스 계층 구조를 활용하기 # 태그 달린 클래스 두 가지 이상의 의미를 표현할 수 있고, 그 중 현재 표현하는 의미를 태그 값으로 알려주는 클래스 class Figure { enum Shape { RECTANGLE, CIRCLE }; // 태그 필드 - 현재 모양을 나타낸다. final Shape shape; // 다음 필드들은 모양이 사각형(RECTANGLE)일 때만 쓰인다. double length; double width; // 다음 필드는 모양이 원(CIRCLE)일 때만 쓰인다. double radius; // 원용 생성자 Figure(double radius) { shape = Shape.CIRCLE; this.radius = radius; } // 사각형용 생성자 Figure(double length, double wi.. 2022. 2. 9.
인터페이스 - 타입을 정의하는 용도로만 사용하기 인터페이스의 역할 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. → 클래스가 인터페이스를 구현한다는 것 : 자신의 인스턴스로 무엇을 할 수 있는 지 의미를 전달 인터페이스는 위에서 언급한 용도로만 사용되어야 한다. 잘못된 인터페이스의 용도 상수 인터페이스 상수 인터페이스 : 메서드 없이, 상수를 뜻하는 static final 필드로 구성된 인터페이스 public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final double BOLTZMANN_CONSTANT = 1.380_648_52e.. 2022. 2. 7.