일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Effective Java
- 신입사원
- 정보처리기사
- 알고리즘
- github
- 프로그래밍
- IT
- spring
- java
- Public
- 메모리
- 이펙티브 자바
- 스터디
- 뮤텍스
- 컴퓨터공학
- OS
- 세마포어
- 공채
- 신입
- 컴퓨터과학
- package-private
- 자바
- 개발
- 우리카드
- CS
- 스프링
- 운영체제
- 깃
- 깃허브
- 디지털
- Today
- Total
목록java (15)
주니어 개발자 성장기
구현 - 불변 객체 Cloenable은 텅 비어 있는 인터페이스지만 clone을 이용하려면 반드시 구현(implements)해주어야 한다. 그 다음 clone 메서드를 super.clone을 사용해 오버라이딩해줘야 한다. 접근 제한자는 public 으로 설정, 반환 타입은 자신의 클래스로 변경한다. Clone 규약 x.clone() != x clone 반드시 원본과 다른 인스턴스를 반환해야 한다. (레퍼런스 자체가 달라야한다.) x.clone().getClass() == x.getClass()가 반드시 true이여야 한다. 원본의 클래스와 동일한 인스턴스를 반환해야 한다. x.clone().equals(x)가 true가 아닐 수도 있다. 복사를 한 인스턴스가 원본과 달라야만 한다면 true가 아닐수도 있..
기본 구현 Object에서 기본적으로 제공하는 toString은 클래스명 + 16진수hashCode값을 반환한다. ← 그닥 유용하지 않다. 재정의 해당 데이터에 적합한 형태로 표현해주는 것이 좋다. toString에 들어가는 필드(혹은 정보)는 외부에 공개할 수 있는 데이터만 공개하는 것이 좋다. 외부에 노출 할 수없는 정보(사용자 정보)는 최대한 숨기자. Getter를 제공하여 toString에 나오는 정보를 접근 가능하게 하자. 어차피 해당 정보를 얻기 위해서 클라이언트가 정해진 포맷에 따라 toString을 파싱할 것이다. IDE나 Lombok을 사용할 수도 있지만 자동으로 생성되는 포맷이 원하는 포맷이 아닐 수도 있다. 그럴 때는 직접 정의하자. 아래와 같이 정적 팩토리 메서드로 정해진 포맷이 입..
개요 함수형 인터페이스란? 인터페이스인데 추상 메서드가 딱 하나만 존재하는 것. @FunctionalInterface 어노테이션을 사용해서 컴파일러의 도움을 받고 함수형 인터페이스임을 명시하는것이 좋다. 참고로 인터페이스에서는 추상 메서드에 abstract 키워드를 생략해도 된다. 실제 사용자바에서 기본적으로 제공하는 함수형 인터페이스가 많으므로 구현하기 전에 자신에게 맞는 것이 있는지 먼저 살펴보자! Function T 타입을 매개변수로 받아 R타입을 리턴하는 함수형 인터페이스 compose, andThen 메서드로 다른 Function 인스턴스와 조합이 가능하다. Consumer T타입을 매개변수로 받아 리턴이 void인 함수형 인터페이스 Supplier 아무런 매개변수가 없고 T타입을 리턴하는 함수..
3장 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의(overriding)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다. 일반 규약에 맞게 해당 메소드를 overriding 해야 일반 규약을 활용하는 클래스들(HashMap, HashSet)이 오동작하지 않게 된다. finalize는 이전 장에서 다루었으므로 더이상 언급하지 않는다. 개요equals 메서드는 overriding하기 쉬워 보이지만 곳곳에 함정이 있으므로 필요하지 않은 경우 overriding하지 않는 것이 최선이다. 그..
개요 자바 7부터 try-finally는 더 이상 최선의 방법이 아니다. (자바 7부터) try-with-resources를 사용하면 코드가 더 짧고 분명하다. 만들어지는 예외 정보도 더 유용하다. try-finally의 문제점 // 코드 9-2 자원이 둘 이상이면 try-finally 방식은 너무 지저분하다! (47쪽) static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(dst); try { byte[] buf = new byte[BUFFER_SIZE]; int n; while ((n =..
개요 자원 회수를 위해서 사용할 수 있는 finalizer와cleaner는 즉시 수행된다는 보장이 없으며 상황에 따라 위험할 수도 있어 불필요하다. Finalizer 다음과 같이 클래스에 Object.finalize 메서드를 오버라이딩 해주면 된다. @Override protected void finalize() throws Throwable { System.out.print(""); } 자바 9부터 Deprecated 되었다. 대안으로 AutoCloseable, Cleaner, WeakReference, PhantomReference 등을 제시하고 있다. (AutoCloseable가 제일 낫다고 한다) 또한 상속을 악용한 Finalizer 공격이 일어날 수도 있다. Cleaner 다음과 같이 stati..