포스팅 썸네일 이미지

프로그래밍/Effective Java

[Effective Java 3/E] ITEM 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라.

*알림 : * Effective Java 3판은 Java 9까지 도입된 언어적 기능을 중심으로 서술되어 있습니다. 10버젼 이후의 Java 개발을 하시는 분들은 우회적인 접근법 대신 Java 언어 내 새로 도입된 기능이 더 간결하고 좋을 수 있습니다. 해당 포스팅은 SSAFY 내 책읽기 스터디의 활동을 통해 작성된 포스팅입니다. https://github.com/kjsu0209/JavaBook https://medium.com/javabook kjsu0209/JavaBook 책읽기 스터디. Contribute to kjsu0209/JavaBook development by creating an account on GitHub. github.com JavaBook – Medium Documentation ..

2021.03.28 게시됨

 포스팅 썸네일 이미지

프로그래밍/Effective Java

[Effective Java 3/E] ITEM 37. ordinal 인덱싱 대신 EnumMap을 사용하라

배열이나 리스트에서 원소를 꺼낼 때, ordinal메서드로 인덱스를 얻는 코드가 가끔 있는데, 바람직하지 못하다. 예제 1-1 : Plant 클래스 class Plant { enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } final String name; final LifeCycle lifeCycle; Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toString() { return name; } } Plant 클래스의 inner class로 enum 타입을 선언해주었다. Enum타입은 생애주기를 나타낸다. 예제 ..

2021.03.28 게시됨

 포스팅 썸네일 이미지

프로그래밍/Effective Java

[Effective Java 3/E] ITEM 36. 비트 필드 대신 EnumSet을 사용하라

작성자 주: 저는 C/C++ 개발을 할 때 비트 필드 구현을 많이 사용했습니다. 하나의 int/long 타입 정수에 여러 개의 flag를 넣을 수 있어 많이 사용됩니다. 보통 or 연산으로 합치고, and로 원하는 flag를 가져오는 식으로 사용합니다. 아래 예제는 리눅스 커널의 mman.h 파일에 있는 flag의 일부입니다. #ifdef __USE_MISC # define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ # define MAP_DENYWRITE 0x00800 /* ETXTBSY */ # define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ # define MAP_LOCKED 0x02000 /*..

2021.03.28 게시됨

 포스팅 썸네일 이미지

프로그래밍/Effective Java

[Effective Java 3/E] ITEM 35. ordinal 메서드 대신 인스턴스 필드를 사용하라

Enum 클래스는 해당 상수가 Enum 타입에서 몇 번째 상수인지 리턴하는 ordinal 메서드를 제공한다. 그러나 사용하지 않아야 한다. 예제1 : 합주단의 종류 public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusicians() { return ordinal() + 1; } } 쓰지 말아야 하는 이유 상수 선언 순서를 바꾸면 ordinal()은 오동작한다. 선언 순서에 기반해 동작하는 ordinal() 입장에선 당연하다. 이미 사용중인 정수와 똑같은 값을 가지는 상수는 만들 수 없다. 8중주는 8명이서 연주한다(octet). 그러나 복4중주(..

2021.03.28 게시됨

프로그래밍/Effective Java

[Effective Java 3/E] ITEM 34. int 상수 대신 열거 타입을 사용하라

열거(이하 Enum) 타입이 도입되기 전에는 상수를 정의할 때에는 정수 열거 패턴(int enum pattern)을 사용했다. //DO NOT public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1; public static final int ORANGE_BLOOD = 2; 쓰지 말아야 할 이유 이 정수 열거 패턴은 type safe를 보장할 수 없다.(APPLE_FUJI==ORAN..

2021.03.28 게시됨

프로그래밍/Algorithm

[BOJ 9375] 패션왕 신해빈

서론 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 어려운 문제는 아니었지만 갯수를 세는 아이디어가 괜찮아서 올려봅니다. 문제 해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 ..

2021.03.04 게시됨

프로그래밍/Algorithm

[BOJ 1092] 배

서론 그리디 문제가 너무 재밌습니다. 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 문제 지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다. 각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다..

2021.03.04 게시됨

프로그래밍/Algorithm

[BOJ 17839] Baba is Rabbit

서론 사랑하는 나의 모교 UNIST에서 개최한 첫 알고리즘 대회의 문제다. 나는 2회 대회에 참가했는데, 알고리즘 준비가 전혀 안되어 있던 상태였기 때문에 허겁지겁 1회 대회 문제를 풀어보았던 기억이 있는데... 그 때는 이 문제조차 어렵게 느껴졌는데 2달 정도 공부하고 나서는 편하게 느껴졌다. 전형적인 solved.ac 실버 수준의 그래프 탐색 문제로, 이 문제를 잘 풀수 있다면 대다수의 실버 그래프 탐색 문제는 풀 수가 있을 것이다. 17839번: Baba is Rabbit Baba에 명령을 한 번 이상 적용한 결과로 나올 수 있는 사물을 사전순으로 출력한다. 단, 적용할 수 있는 명령이 없다면, 아무것도 출력하지 않는다. www.acmicpc.net 문제 원이는 요즘 유행하는 게임을 하고 있다. 이..

2021.03.04 게시됨

카테고리 없음

본 블로그를 만들면서 참고한 링크

Syntax Highlighter 티스토리 코드블럭용 Syntaxhighlighter 수정버전 (뉴에디터의 코드블럭 및 기존 Syntaxhighlighter 태그 2020-05-06 update log: Syntaxhighlighter의 부가 기능을 사용할 수 없었던 문제가 있어서 Syntaxhighlighter_For_Tistory.zip 안에 들어있는 파일중 shCoreForTistory.js파일 수정하였습니다. 2010-05-03 update.. kwonkyo.tistory.com 티스토리 무료 반응형 스킨 티스토리 블로그 반응형 무료 스킨 배포 :: 베이스캠프 (나눔, 추천) 업데이트 히스토리 Releases · ruden91/public-basecamp-skin 티스토리 무료 반응형 스킨 :: ..

2021.03.01 게시됨

프로그래밍/Effective Java

[Effective Java 3/E] 3장 모든 객체의 공통 메서드

ITEM 10. equals는 일반 규약을 지켜 재정의 하라 기본 object를 상속하고 equals를 override 하지 않은 경우에는, Object의 equals를 상속하고 객체 식별성을 기준으로 판단한다. String s1 = new String("a"); String s2 = new String("a"); s1 == s2; // false. 두 객체는 같은 "a"라는 문자열을 담고 있는 클래스지만 // 각각 다른 인스턴스다. s1.equals(s2); // true. 다른 객체지만 의미가 같으므로 논리적 동치성. 아래 규칙 중 단 하나라도 만족하면 재정의 하지 않도록 하자. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 게 아닌 동작하는 개체를 표현한다. thread는 equals가 성립할 ..

2021.02.28 게시됨