More Programmings

Comparable 인터페이스를 구현한 객체들은 검색하거나 최대/최소치를 계산하거나 정렬을 하기에 편리하게 사용이 가능하다. compareTo 구문은 equals와 비슷함.비교 불가능한 자료형인 경우 ClassCastException을 발생시킴.compareTo의 경우 equals 규약과 마찬가지로 반사성, 대칭성, 추이성을만족해야 함.
Cloneable은 어떤 객체가 복제(clone)을 허용한다는 사실을 알리는데 쓰려고 고안된 인터페이스다.1. clone된 객체와 기존 객체는 같이 말아야 한다.2. clone의 class 명과 기존 객체의 class 명은 동일해야 한다.3. clone한 객체의 값과 기존 객체의 값이 같을 수도 있지만 별도의 조작을 한 경우 다를 수 있다. 비 final class의 clone 재정의시 super.clone을 호출해 얻은 객체를 반드시 반환해야 한다.Clonable을 상속받은 class는 제대로 동작하는 public class를 보유하고 있어야 한다.클라이언트에는 최소환의 로직만 노출 시켜야 한다.(로직은 라이브러리 내부에서 수행되게 한다.) 객체 복사를 지원하는 가장 좋은 방법은 복사 생성자나 복사 팩..
toString을 잘 만들어 놓으면 클래스를 좀 더 쾌적하게 사용할 수 있다.toString 메소드 내부에 각 객체의 중요 정보드르을 전부 담아서 반환을 하는 것이 좋다.따라서 toString 메소드 안에 객체의 중요 정보들이 들어갈 수 있도록 재정의를 하는 것이 필요하다.
equals 매서드를 재정의하는 클래스는 반드시 hashCode 메서드도 재정의해야한다. 같은 객체는 같은 hashCode를 가져야 하는데 equals가 재정의 되는 경우 이를 위반하게 된다.이 때 중복 코드는 따로 재정의할 필요 없다.(알아서 ㅊ
equals 메소드를 구현하기 위해서 따라야 하는 것1. == 연산자를 사용하여 equlas의 인자가 자기 자신인지 검사.- 맞다면 반드시 true를 반환하게 할 것2. instanceof 연산자를 사용하여 인자의 자료형이 정확한지 검사.- 정확하지 않다면 반드시 false를 반환 (Collection class에서 많이 사용)3. equals의 인자를 정확한 자료형으로 반환- instanceof로 형검사를 했으므로 반드시 성공.4. "중요" 필드 각각이 인자로 주어진 객체의 해당 필드와 일치하는지 검사.- 모두 일치하는 경우 true 반환, 그렇지 않은 경우 false 반환- float나 double의 경우 특별 상수가 붙으므로 별도 검사5. equals 메서드 구현을 끝냈다면, 대칭성, 추이성, 일관..
종료자를 사용하는 것은 위험하고 일반적으로 불필요. java에서 종료자의 단점time-critical한 작업을 종료자에서 사용하는 경우 언제 작업이 종료되는지 확인을 하는 것이 불가능.다른 작업 진행 중에 갑자기 실행되는 경우도 있고 끝까지 종료되지 않는 경우도 발생할 수 있음. 중요한 상태 정보의 경우 종료자에서 갱신하면 안됨. 상태 정보를 제거하는 경우 명시적인 종료 메서드를 하나 정의 하고 이를 사용을 하는 것이 좋음(종료자 사용시 성능이 급격하게 떨어질 수 있음)- try finally 구문을 활용 종료자 사용처1. 명시적 종료 메서드 호출을 잊을 경우 대비하는 안전망으로서의 역할2. native peer와 연결된 객체를 다룰 때 하위 클래스에서 상위 클래스 종료자를 재정의(override)하면서..
일반적으로 java에서는 c, c++에서와 달리 따로 메모리를 해제해주지 않는다고 하더라도 자동적으로 메모리를 해제해준다.하지만 stack과 같이 memory allocation이 해야하는 일이 많아지거나 하는 경우 성능 저하를 일으키거나 메모리 요구량이 증가할 수 있음.극단적인 경우 disk paging 혹은 outofmemoryError가 발생하면 프로그램이 강제 종류 될 수 있음. 객체를 null로 만드는 것이 가장 쉬운 방법but, 프로그램이 난잡해질 수 있기 때문에 예외적인 조치를 하는 것이 좋음.따라서 변수의 유효 범위를 최대한 좁게 만들면 해결 가능. 일반적으로, 자체적인 메모리 관리를 하는 클래스의 경우 memory leak이 발생하지 않도록 주의 필요.cache의 경우에도 Memory l..
String s = new String("abc"); 이 구문의 경우 abc라는 정보를 가진 객체를 생성하는 것이 구문이 loop안 에 있는 경우 loop의 횟수만큼 객체가 생성되기 때문에 매우 위험한 구문String s = "abc";
객체를 만들 수 없도록 하기 위해 class를 abstract로 선언해 봤자 소용 없음.private 생성자를 class에 넣게 되면 객체 생성을 미연에 방지할 수 있음.사용법public class testClass{ private testClass(){throw new AssertionError(); }} 이렇게 생성하면 하위 클래스의 무분별한 생성도 방지할 수 있음.
플로쨔응
'More Programmings' 카테고리의 글 목록