본문 바로가기

전체 글128

[이펙티브 자바] 05. 열거 타입과 애너테이션 [이펙티브 자바] 05. 열거 타입과 애너테이션 자바에는 특수한 목적의 참조 타입이 두 가지가 있다. 하나는 클래스의 일종인 열거 타입(enum)이고, 다른 하나는 인터페이스의 일종인 애너테이션(annotation)이다. 아이템 34. int 상수 대신 열거 타입을 사용하라 자바에서 열거 타입을 지원하기 전에는 아래 코드처럼 정수 상수를 한 묶음 선언해서 사용하곤 했다. public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int ORANGE_NAVEL = 0 public static final int ORANGE_TEMPLE = 1; 정수 열거 패턴 기법에는 단점이 많다. 1.. 2022. 9. 1.
[이펙티브 자바] 04. 제네릭 [이펙티브 자바] 04. 제네릭 제네릭은 자바 5부터 사용할 수 있다. 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때마다 형변환을 해야했는데, 런타임에 형변환 오류가 나곤 했다. 반면 제네릭을 사용하면 컬렉션이 담을 수 있는 타입을 컴파일러에 알려주게 되어 컴파일러는 알아서 형변환 코드를 추가할 수 있게 된다. 덕분에 더 안전하고 명확한 프로그램을 만들 수 있다는 장점이 있지만, 코드가 복잡해진다는 단점이 있다. 아이템 26. 로 타입은 사용하지 말라 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라 한다. 각각의 제네릭 타입은 일련의 매개변수화 타입을 정의한다. 제네릭 타입을 하나 정의하면 그에 딸린 로 타입(raw type)도 함께 정의된다. 로 타.. 2022. 8. 24.
[헤드퍼스트 디자인패턴] 10. 프록시 패턴 (Proxy pattern) [헤드퍼스트 디자인패턴] 10. 프록시 패턴 (Proxy pattern) 1. 프록시 패턴이란? 특정 객체로의 접근을 제어하는 대리인을 제공한다. 프록시 패턴을 사용하면 원격 객체나 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체로의 접근을 제어하는 대리인 객체를 만들 수 있다. 2. 프록시에서 접근을 제어하는 몇가지 방법 원격 프록시를 써서 원격 객체로의 접근을 제어할 수 있다. 가상 프록시(virtual proxy)를 써서 생성하기 힘든 자원으로의 접근을 제어할 수 있다. 보호 프록시(protection proxy)를 써서 접근 권한이 필요한 자원으로의 접근을 제어할 수 있다. 3. 프록시 패턴의 클래스 다이어그램 RealSubject : 진짜 작업을 처리하는 객체 Proxy : RealS.. 2022. 8. 21.
[이펙티브 자바] 03. 클래스와 인터페이스 [이펙티브 자바] 03. 클래스와 인터페이스 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다. 15.1 캡슐화의 장점 캡슐화의 장점은 정말 많은데, 그중 대부분은 시스템을 구성하는 컴포넌트들을 서로 독립시켜서 개발, 테스트, 최저과, 적용, 분석, 수정을 개별적으로 할 수 있게 해주는 것과 연관되어 있다. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 .. 2022. 8. 20.
[이펙티브 자바] 02. 모든 객체의 공통 메서드 https://be-developer.tistory.com/87 [이펙티브 자바] 01. 객체 생성과 파괴 [이펙티브 자바] 01. 객체 생성과 파괴 객체의 생성과 파괴를 다룬다. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법, 올바를 객체 생성 방법과 불필요한 생성을 피하는 방법, be-developer.tistory.com [이펙티브 자바] 02. 모든 객체의 공통 메서드 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의를 염두해 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다... 2022. 8. 10.
[헤드퍼스트 디자인패턴] 09. 상태 패턴(State Pattern) [헤드퍼스트 디자인패턴] 09. 상태 패턴(State Pattern) 1. 상태 패턴이란? 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 2. 상태 기계 기초 지식 알아보기 뽑기 기계를 만들때, 상태를 이용해 기계를 구현하는 방법을 간단하게 살펴보자. 2.1 우선 상태들을 모아본다. 총 4개의 상태가 존재한다. (No Quarter : 동전 없음, Has Quarter : 동전 있음, Gumball Sold : 알맹이 판매, Out of Gumballs : 알맹이 매진) 2.2 현재 상태를 저장하는 인스턴스 변수를 만들고 각 상태의 값을 정의한다. final static int SOLD_OUT = 0; final static.. 2022. 8. 7.
[이펙티브 자바] 01. 객체 생성과 파괴 [이펙티브 자바] 01. 객체 생성과 파괴 객체의 생성과 파괴를 다룬다. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법, 올바를 객체 생성 방법과 불필요한 생성을 피하는 방법, 제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 요령을 알아본다. 아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자이고, 이와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. // 기본타입인 boolean을 받아 박싱 클래스인 Boolean 객체 참조로 변환하는 정적 메소드 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : .. 2022. 8. 2.
[헤드퍼스트 디자인패턴] 08. 반복자 패턴 (Iterator Pattern) 과 컴포지트 패턴 (Composite Pattern) [헤드퍼스트 디자인패턴] 08. 반복자 패턴 (Iterator Pattern) 과 컴포지트 패턴 (Composite Pattern) 1. 반복자 패턴 (Iterator Pattern) 1.1 반복자 패턴이란? 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 1.2 요구사항 팬케이크 하우스에서 파는 아침 메뉴와 객체 마을에서 파는 점심메뉴를 한곳에서 제공한다. 팬케이크 하우스에서는 메뉴를 List로 관리하고 객체 마을에서는 메뉴를 Array로 관리한다. 1.3 자격 요건 구현하기: 1차 시도 pancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); ArrayList breakfastItems = pancakeHou.. 2022. 7. 31.
[Spring Boot] aws s3 presignedUrl로 업로드 하는 법(One Time Token, OTT) [Spring Boot] aws s3 presignedUrl로 업로드 하는 법 회사에서 이미지 업로드시 서버의 I/O 부하를 줄이기 위해 클라이언트에서 바로 aws의 S3에 업로드를 할 수 있도록 presignedUrl을 내리라는 미션을 받았다. "만든 Url이 정상적으로 작동하는지는 프론트에서 확인을 해줘야하나요?" 라고 팀장님께 물으니, 프론트 서버도 직접 만들어 api 테스트 하고 머지하라는 팀장님의 말씀에.. 만만한 vue와 kotlin을 사용해서 aws s3 presignedUrl을 받아 이미지를 업로드 하고, 이미지를 받아오는 것까지 구현해보았다. 처음에 one time token = OTT 라는 키워드를 주셔서 검색을 했는데 잘 안나왔다. 그래서 이리저리 보니 서명된 url이라는 키워드가 있.. 2022. 7. 29.
728x90
반응형