목록Java (6)
공부함
클래스와 인터페이스 설계에 사용하는 강력한 요소를 활용하는 방법을 알아보자. [아이템 15] 클래스와 멤버의 접근권한을 최소화하라 잘 설계된 컴포넌트는 내부 구현을 완벽히 숨겨 구현과 API를 깔끔하게 분리한다. APi를 통해서만 다른 컴포넌트와 소통한다. 이것을 정보 은닉, 캡슐화라고 하며 sw 설계의 근간이 되는 원리다. 캡슐화의 장점은 다음과 같다 개발 속도가 높아진다. 여러 컴포넌트 병렬 개발이 가능하기 때문이다. 관리 비용을 낮춘다. 디버깅, 교체 부담이 적다. 성능 최적화에 도움을 준다. 최적화할 컴포넌트를 정하고 다른 컴포넌트에 영향을 주지 않고 최적화 할 수 있다. 재사용성을 높인다. 컴포넌트가 외부에 거의 의존하지 않고 독자적으로 동작할 수 있기 때문이다. 큰 시스템 제작 난이도를 낮춘다..
Object 클래스의 final이 아닌 메서드들은 재정의를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약을 따라야 한다. 잘못 구현하면 클래스가 이 규약을 준수한다고 가정하는 HashMap 같은 클래스가 오동작할 수 있다. [아이템 10] equals는 일반 규약을 지켜 재정의하라 먼저 equals를 재정의하지 않아야 할 상황이 있다. 각 인스턴스가 본질적으로 고유하다 값이 아닌 동작하는 개체 표현 , Thread 논리적 동치성을 검사할 일이 없다 상위 클래스 equals가 하위 클래스에 들어맞는다 클래스가 private이거나 package-priavte이고 equals를 호출할 일이 없다. equals가 실수로라도 호출되는걸 막고 싶다면 오버라이딩해서 예외를 던지도록 하자 equals는 ..
[아이템 1] 생성자 대신 정적 팩터리 메서드를 고려하자 정적 팩터리 메서드는 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드다. 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체로는 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리 메서드는 이름만 잘 지으면 반환될 객체의 특성을 잘 묘사할 수 있다. 2. 호출될 떄마다 인스턴스를 새로 생성하지 않아도 된다. 생성자는 호출될 때마다 인스턴스를 만들어야 하지만, 정적 패터리 메서드는 그렇지 않다. 반복되는 요청에 같은 객체를 반환할 수 있다. 따라서 언제 어느 인스턴스를 살아있게 할지 통제할 수 있다. 이런 클래스를 인스턴스 통제 클래스라 한다. 3. 반환 타입의 하위 타입 객체를 반환할 수 있다. 반환될 객체의 타입을..
https://80000coding.oopy.io/21cb57a3-681b-404d-a4ac-8ab0e7289bc0 [JAVA] Sort 사용 (Arrays, Collections) Java’s Sort 80000coding.oopy.io Arrays.sort int[] arr = new int[] {1,5,3,2,4}; Arrays.sort(arr); Integer[] arr2 = new Integer[] {3,4,6,1}; Arrays.sort(arr2); Arrays.sort로 배열을 정렬할 수 있다. 오름차순으로 정렬한다. Integer[] arr2 = new Integer[] {3,4,6,1}; Arrays.sort(arr2,Collections.reverseOrder()); 내림차순으로 정렬하..
예외 클래스 Java에서 예외는 class로 선언된다. Exception 클래스나 Exception의 서브클래스를 상속받아서 선언한다. 클래스이므로 생성자, 멤버변수, 함수 등을 가질 수 있다. 예외 클래스들은 일반 객체처럼 사용할 수 있다. 일반 객체와 다른 점은 예외 클래스는 throw 할 수 있다는 것이다. Java의 예외 구조는 위와 같다. 실행시간에 발생하는 예외들은 RuntimeException을 상속하며, Runtime예외는 컴파일러에 의해 미리 검사할 수 없다. 예외 처리 throw문을 통해 예외를 던진다. 예외가 발생했는데 handle하지 않으면 예외메세지가 표시된다. 예외메세지는 call stack trace를 포함한다. (main method부터 시작한 호출 과정) try-catch-..
우테코 프리코스 1주차 미션을 하면서 나는 +를 이용해 문자열 생성을 했다. 리뷰어가 StringBuilder, StringJoiner, String.format을 사용해서 관리하는게 어떻겠냐고 조언을 해줬다. 그래서 각 내용에 대해 간단하게 정리해보고자 한다. 먼저 String을 +를 사용해 이어붙일 때의 성능상의 단점을 알아보자. String은 불변 객체다. 즉 한번 생성하면 바꿀 수 없다. +를 이용해 하나의 문자열을 다른 문자열과 연결하게 되면 새 문자열이 생성되고 이전 문자열은 가비지 컬렉터로 돌아간다. 따라서 여러 번의 이어붙이기 연산을 통해 String을 이어붙인다면 메모리 낭비가 발생하게 된다. 가독성 측면에서도 String을 단순히 +로 이어붙이기보다는 StringBuilder나 Stri..