일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- There isn't anything to compare.
- 상수와 Enum
- Oracle JDK와 OpenJDK의 차이
- ServiceTest
- 테스트 성능 개선
- 객체지향적인 설계
- 윤년계산하기
- 자판기미션
- JDK
- 인수테스트
- PR 오류
- Getter Setter
- ControllerTest
- 우아한테크코스
- 백준
- throw 와 throws 차이
- 블랙잭 회고
- 우테코
- 우테코4기
- 자바로 만들수 있는 것
- 프로젝트 패키지 구조
- 리스코프치환원칙
- 상근날드
- JXM
- 자바 4334
- 자바 버전 다운 그레이드
- 방어적 복사
- 제임스고슬링
- 자바의 종류
- java 1000번 A+B
- Today
- Total
목록전체 글 (36)
개발새발

프로젝트 패키지 구조 어떻게 설계 해야 할까? 프로젝트를 시작하면 제일 처음 드는 고민이 패키지를 어떻게 가져가야 하는가? 인 것 같다. 현재까지 패키지 구조의 장 단점을 명확하게 느낄 수 있는 계기가 없어 나만의 명확한 분류 기준은 없지만, 여러가지 패키지 구조를 직접 설계해보며 조금이나마 기준을 세워보고자 한다. 계층형 아키텍쳐 이번 프로젝트에서 사용했던 구조는 계층형이었다. UI/ 비지니스 모델을 분리하라는 조건에 맞추기 위해서 관심사 별로 레이어를 나눠서 구현하는 것이 좋겠다고 판단했다. 웹 계층에서 대표적인 계층형 아키텍처는 MVC 이기 때문에 MVC 패턴을 적용시켰다. MVC 패턴을 사용하면 Model과 View가 다른 컴포넌트들에 종속되지 않아 변경에 유리하다는 장점을 가질 수 있다. MVC..

Enum 클래스를 사용하기 전 Enum 타입의 클래스가 있다는 것은 알고 있었지만, 막상 활용해본 적은 없었다. 그런데 고정 클래스로 Enum type 의 클래스로 Coin 이 있는게 아닌가??? 왜 static final 상수로 고정하지 않고 amount 를 return 받도록 했을까? 유추 해봤다. 동전 타입을 고정 시키기 위해 요구조건을 보면 500원, 100원, 50원, 10원만 사용이 가능하게 해두었다. 이번 미션에서 코인 타입별 갯수를 관리하기 위해 CoinType 이라는 클래스를 만들었다. 만약 Coin 이 그냥 상수였다면 여기서 코인 타입을 300원 으로 넣어도 생성될 것이다. public class CoinType { private final int type; // 아무 숫자나 다 들어올..
기능 요구사항에 입력이 잘못되면 IllegalArgumentException 을 발생 시키라고 되어있었다. 에러를 try ~ catch문 으로 받아본 적은 있으나 일부러 발생시켜서 던져본 적은 없었고, 그래서 구글링을 하던 중 에러(error) 와 예외(exception) 를 혼용해서 사용하는 포스팅을 보게 되었다. 두개의 차이가 뭘까? 나도 정확하게 모르겠어서 알아봤고, 결론부터 말하자면 다르다!! 오류(error) 시스템 레벨에서 발생하며, 개발자가 예측하지 못하는 결함 예외(exception) 개발자가 짠 로직에서 발생, 예외 상황을 예측할 수 있어 예외처리가 가능함 차이를 알아봤다. 예측 불가능 함과 가능함.. ! 오케이 그럼 이제 예외처리 방식에 대해 알아보자 예외(exception) 처리 방법..

자바 버전 변경을 하며 마주한 에러 지금은 자바 8로 변경해둔 상태지만, 원래는 11 버전이었고, openJDK java8 을 다운받은 후 인텔리제이 -> 세팅에서 설정을 변경했지만, 창을 껐다가 키면 이전 버전으로 복구되는 문제가 있었다. 또 마주할 수 있는 문제기 때문에 파고들어보기로 했다. 1. OracleJDK 와 OpenJDK 와 AdoptOpenJDK 의 차이? 위에 에러는 결론적으로 OpenJDK -> AdoptOpenJDK 로 변경 하니 해결되었다. 왜 그럴까? 문제의 시작은 OracleJDK 로 부터 나왔다. 주 쟁점이 유료화 였다. 학생 신분에서는 OracleJDK 가 유료화 된 부분에 큰 영향이 없어 고민할 기회가 없었던 것 같다. 1.1 OracleJDK 와 OpenJDK 의 차이 ..

숫자 중복을 체크하며 발견한 오류 숫자 중복 문제를 어떻게 구현할까 고민하다가 중복을 허용하지 않는 자료형인 Set 이 떠올랐다. 정렬은 하지 않을 것이기 때문에 HashSet을 선택하고 구현했다. 테스트로 123, 456 489 등을 넣었다. 결과 값이 잘 나왔다. 다음으로 986을 넣었더니 689로 출력되었다 뭐지? 하고 찾아보니 HashSet은 순서를 보장하지 않는다는 단점을 발견했다. 이 부분은 LinkedHashSet로 해결했다. 이 참에 Set에 대해 깊게 알아보자. HashSet은 왜 순서를 보장하지 않을까? 내부를 살펴보니 내부가 HashMap 으로 구현 되어 있다. 위에서 언급했듯 HashMap, HashSet 은 순서를 보장하지 않는다는 특징이 있다. 그럼 랜덤으로 결과가 나오나??? ..
매직 넘버/매직 리터럴을 static final로 선언하는 이유가 뭘까? 범위를 표현하거나, 출력문을 사용하면서 이전에 읽었던 자바 코딩의기술 내용 중 매직넘버를 상수로 대체 하라는 내용이 떠올랐다. 그래서 static final 을 사용해서 구현했는데, 문득 불변함을 표시하고 변수명으로 사용 의미를 표현하려면 final로도 충분하지 않나? 라는 생각이 들었고 알아보기로 했다. 매직 넘버/매직 리터럴 프로그래밍에서 상수로 선언하지 않은 숫자를 매직 넘버, 문자열을 매직 리터럴이라고 한다. final final은 해당 오브젝트가 단 한번 할당할 수 있음을 의미한다. 즉 값이 변하지 않음을 의미한다. static 데이터가 프로그램 실행 직후부터 끝날 때까지 메모리 수명이 유지됨을 의미한다. 매직 넘버/매직 ..

사용하는 메서드 내부 동작을 살펴보다가 private로 선언된 생성자를 발견했다. private로 선언하면 인스턴스 생성을 못하지 않나?? 왜 그렇게 했을까 궁금해졌다. 생성자(Constructor) 객체를 생성할 때 항상 실행되는 것으로, 객체를 초기화해주기 위해 맨 처음 실행되는 메소드이다. private private는 동일 package, 다른 package 모두 접근이 불가능하고 같은 Class 내에서만 접근을 허용하는 제한자이다. private 생성자가 있는 클래스의 모든 메서드는 static이다? 다시 돌아오자 객체는 생성하지 않는데, 모든 메서드는 전역에서 접근이 가능하다.. 쓰읍 뭔가 싱글톤에 냄새가 난다. 맨처음 빌드가 되면 모든 클래스가 메모리할당이 되고, 그 상태에서 클래스 내에 메..

[백준 2805 ] 나무자르기 (JAVA) 출처 www.acmicpc.net/problem/2805 2473번: 세 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 www.acmicpc.net 문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높..