본문 바로가기

분류 전체보기31

[이펙티브 자바 : 2장] 모든 객체의 공통 메소드 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. Object에서 final이 아닌 메소드 (equals, hashCode, toString, clone, finalize)는 모두 재정의(오버라이딩)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다. 그래서 Object를 상속하는 클래스, 즉 모든 클래스는 이 메소드들을 일반 규약에 맞게 재정의 해야 한다. 메소드를 잘못 구현하면 대상 클래스가 이 규약을 준수한다고 가정하는 클래스(HashMap과 HashSet 등)를 오동작 하게 만들 수 있다. [아이템 10] equals는 일반 규약을 지켜 재정의하라 equals 재정의가 필요치 않는 경우 하나. 각 인스턴스가 본질적으.. 2020. 6. 27.
[이펙티브 자바 : 1장] 객체 생성과 파괴 [아이템 1] 생성자 대신 정적 팩토리 메서드를 고려하라 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 장점 하나 : 이름을 가질 수 있다. 생성자에 제공하는 인자가 반환하는 객체를 잘 설명하지 못할 경우에, 잘 만든 이름을 가진 정적 팩토리를 사용하는 것이 사용하기보다 더 쉽고 읽기 좋다. 그 예로 BigInteger(int, int, Random)과 BigInteger.probablePrime을 들고 있다. 또한, 생성자는 시그니처에 제약이 있다. 똑같은 타입을 파라미터로 받는 생성자 두 개를 만들 수 없으니까 그런 경우에도 정적 팩토리 메서드를 사용하는 것이 유리하다. // 생성자를 사용하는 경.. 2020. 6. 27.
캐시 메모리란? 캐시 부록 메모리 계층 구조 데이터를 저장하는 공간의 속도와 용량은 반비례 관계이다. 대체적으로 속도가 빠른 메모리는 저장공간이 작으며, 느린 메모리는 저장공간이 큰 특징을 가진다. 속도와 공간 두마리 토끼를 잡기에는 비용이 너무 커진다. 그렇기에 데이터 저장 공간은 속도와 용량에 따라 각자 특성에 맞게 역할을 나누어서 사용한다. 캐시 개요 컴퓨터 시스템의 성능을 향상시키기 위해 주로 CPU 칩 안에 포함되는 빠르고 작고 비싼 메모리이다. 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어한다. 대부분 프로그램은 한 번 사용한 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있다. 데이터 지역성을 활용하여 캐.. 2020. 5. 24.
HTTP 더 알아보기 부록 : HTTP 더 알아보기 HTTP / 0.9 & HTTP / 1.0 한계 각 요청에 대해 새 커넥션을 열고 응답이 전송 된 직후 닫아야했다. 새 연결이 설정 될 때마다 TCP 3-way Handshake가 발생한다. 더 나은 성능을 위해서는 클라이언트와 서버 간의 왕복 시간을 줄이는 것이 중요했다. HTTP / 1.1은 지속적인 연결을 통해 이를 해결했다. TCP 3-way Handshake란? TCP 장치들 사이에서 논리적인 접속을 성립하기 위하여 3-way Handshake를 사용하는데 3-way Handshake는 TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방과 사전에 세션을 수립하는 과정을 의미한다. Client .. 2020. 5. 24.