책 썸네일형 리스트형 [Effective Java] 아이템 7. 다 쓴 객체 참조를 해제하라. 안녕하세요 남갯입니다 오늘은 아이템 7. 다 쓴 객체 참조를 해제하라.에 대해 작성해보려고 합니다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Object[] getElements() { return elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptySta.. [Effective Java] 아이템 6. 불필요한 객체 생성을 피하라. 안녕하세요 남갯입니다 오늘은 이펙티브 자바 item 6에 대해 포스팅 해보려고 합니다. 아이템 6. 불필요한 객체 생성을 피하라. String 관련 글에서도 작성했었지만 아래와같이String s = new String("bikini"); 이렇게 생성할 경우 매번 힙영역에 올라가게 됩니다. 아래의 글을 참조해주세요 2019/12/08 - [IT/Java언어] - [Java] String, StringBuilder, StringBuffer 란? String s = "bikini" 를 통해 생성해서 상수풀에 올라가게 되므로 모든 코드가 똑같은 객체를 재사용함을 보장한다. Boolean(String) // deprecate in java9 생성자 대신 Boolean.valueOf(String) 팩터리 메서드를 .. [Effective Java] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라. 안녕하세요 남갯입니다 오늘은 이펙티브 자바 3/e에 대한 내용을 공유하려고합니다. 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라. 클라이언트가 클래스의 인스턴스를 얻는 전통적인 방법의 수단은 public 생성자이다. 하지만 프로그래머는 클래스와는 별개로 정적 팩터리 메서드를 제공할 수 있다.*팩토리 메소드 패턴과 다른 내용 일단 생성자 대신 정적 팩토리 메소드를 고려하는 방식은 장점과 단점이 존재한다. 5가지의 장점 1. 이름을 가질 수 있다.생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다.반면에 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 묘사가 가능하다. 예를들어 BigInteger(int, int, Random) 이라는 소스와 - (생성자.. [컴파운드패턴] 디자인 패턴 합치기 안녕하세요 남갯입니다. 오늘은 디자인패턴을 여러개 섞어서 문제를 해결하는 컴파운드 패턴에 대해 포스팅 해보려고합니다. 컴파운드 패턴이란?반복적으로 생길수 있는 일반적인 문제를 해결하기 위한 용도로 두개 이상의 패턴을 결합해서 사용하는것을 뜻합니다. 1. 우선 SImUDuck 오리 시뮬레이터를 개조해보겠습니다. interface Quakable{ fun quack() }오리의 행동을 구현하고 class MallardDuck : Quakable{ override fun quack() = println("Quack") } class RedheadDuck : Quakable{ override fun quack() = println("Quack") }두가지의 오리를 만들었습니다. class DuckCall : Q.. [디자인패턴] 프록시 패턴 Proxy pattern 안녕하세요 남갯입니다 오늘은 프록시 패턴에 대해 포스팅해보려고합니다. 사건의 발단이전시간에 진행했던 뽑기 기계의 재고와 현재상태를 알아낼 수 있도록 해달라는 부탁이 왔습니다. 위치를 알아낼 수 있는 코드를 만들기 위해 class GumballMachine(val location: String, val count: Int) { } 이와같이 생성하고 class GumballMonitor(val machine: GumballMachine) { fun report() { println("뽑기 기계 위치: ${machine.location}") println("현재 재고: ${machine.count}") } } 모니터 클래스를 생성해서 기계의 상태를 가져오는것을 만들었습니다. fun main() { val co.. [디자인패턴] 스테이트 패턴 (State) 안녕하세요 남갯입니다 오늘은 스테이트 패턴에 대해 포스팅 해보려고 합니다. 사건의 발단 뽑기회사에서 뽑기 프로그램을 만들게 되었습니다. 총 상태는 아래와같이 4가지가 있고,동전없을때 동전을 넣으면 동전있음으로 바뀌고, 이것이 상태의 전환입니다. 즉 상태는 4개이고 1.동전 있음2.동전 없음.3.알맹이 판매.4.알맹이 매진. 행동도 4개가 되는거죠1. 동전 투입2. 동전 반환3. 손잡이 돌림4. 알맹이 내보냄 이제 상태 기계 역할을 하는 클래스를 만들어보겠습니다.fun insertQuarter(){ if(state == HAS_QUARTER){ println("동전은 한개만 넣어주세요") }else if(state == SOLD_OUT){ println("매진되었습니다. 다음 기회에 이용해주세요.") }e.. [디자인패턴] 이터레이터 패턴 안녕하세요 남갯입니다. 오늘은 이터레이터 패턴에 대해 포스팅 해보려고 합니다. 사건의 발단객체마을의 식당과 객체마을의 팬케이크 하우스의 두 가게가 합쳐지면서 메뉴를 합의해서 바꿔야하는 원인이 생겼습니다.한쪽은 ArrayList를 이용해서 만들었고 한쪽은 배열을 써서 만들었습니다. 두 가게는 메뉴를 구현하는 방법에 대해 합의를 보게 되었습니다. class MenuItem( val name: String, val description: String, val vegetarian: Boolean, val price: Double ) 이렇게 말이죠 두 가게가 어떤 문제때문에 싸우는지 보겠습니다. 팬케익을 만드는 하우스의 메뉴는 아래와 같습니다.class pancakeHouseMenu(val menuItems: A.. [디자인패턴] 템플릿 메소드 패턴 안녕하세요 남갯입니다. 오늘은 템플릿 메소드 패턴에 대해 포스팅 해보려고 합니다. 사건의 발단 커피와 차에 공통점이 있는데 매우 비슷한 방법으로 만들어진다고 합니다. - 커피만드는법1. 물을 끓인다2. 물에 커피를 우려낸다3. 커피를 컵에 딸느다.4. 설탕과 우유를 추가한다. 커피를 클래스화 해보겠습니다. class Coffee{ fun prepareRecipe(){ boilWater() brewCoffeeGrinds() pourInCup() addSugarAndMilk() } fun boilWater(){ println("물 끓이는중") } fun brewCoffeeGrinds(){ println("필터를 통해서 커피를 우려내는 중") } fun pourInCup(){ println("컵에 따르는 중".. 이전 1 2 3 4 5 6 다음