![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/mWrot/btrB67hUTAR/9OSdsYbexfIUsFOE5idQkK/img.jpg)
자바의 데이터 타입은 크게 두 가지로 나눌 수 있습니다. 바로 int, double, boolean 같은 기본 타입과 String, List와 같은 참조 타입입니다. 그리고 각각의 기본 타입에는 대응하는 참조 타입이 하나씩 있으며, 이를 박싱된 기본 타입이라고 합니다. 예컨대 int, double, boolean에 대응하는 박싱된 기본 타입은 Integer, Double, Boolean 입니다. 아이템 6에서 이야기했듯, 오토박싱과 오토언박싱 덕분에 두 타입을 크게 구분하지 않고 사용할 수는 있지만, 그렇다고 차이가 사라지는 것은 아닙니다. 둘 사이에는 분명한 차이가 있으니 어떤 타입을 사용하는지는 상당히 중요합니다. 즉, 주의해서 선택해야 한다는 의미입니다. 기본 타입과 박싱된 기본 타입의 주된 차이는..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bgNPQv/btrBxbrzz0e/eTlqFnsfeZ4kxLR2WFXKLK/img.jpg)
float와 double 타입은 과학과 공학 계산용으로 설계되었습니다. 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었습니다. 따라서 정확한 결과가 필요할 때는 사용하면 안 됩니다. float와 double 타입은 특히 금융 관련 계산과는 맞지 않습니다. 0.1 혹은 10의 음의 거듭제곱 수를 표현할 수 없기 때문입니다. 예를 들어 주머니에 1.03달러가 있었는데 그 중 42센트를 썼다고 해봅시다. 🤔 남은 돈은 얼마인가요? 다음은 이 문제의 답을 구하기 위해 작성된 코드입니다. System.out.println(1.03 - 0.42); 안타깝게도 이 코드는 0.6100000001을 출력합니다. 결괏값을 출력하기 전에 반올림하면 해결되리라 생각할지 모르지만..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/FDCeA/btrBvZdLm5c/pPmtAIUPkm6BfmH6JKCeK0/img.jpg)
무작위 정수 하나를 생성하고 싶다고 해봅시다. 값의 범위는 0부터 명시한 수 사이입니다. 아주 흔히 마주치는 문제로, 많은 프로그래머가 다음과 같은 짤막한 메서드를 만들곤 합니다. static Random rnd = new Random(); static int random(int n) { return Math.abs(rnd.nextInt()) % n; } 괜찮은 듯 보여도 문제를 세 가지나 내포하고 있습니다. 위 코드의 문제점 [1]. n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다. [2]. n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다. n 값이 크면 이 현상은 더 두드러집니다. 다음 코드는 무작위 수를 백만개를 생성한 다음, 그 중 중간 값보다 작..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cyZsnI/btrBA03Ckcn/y0b19uNwB03owEKyek5kIK/img.jpg)
아이템 45에서 이야기했듯, 스트림이 제격인 작업이 있고 반복이 제격인 작업이 있습니다. 다음은 전통적인 for 문으로 컬렉션을 순회하는 코드입니다. for (Iterator i = c.iterator(); i.hasNext(); ) { Element e = i.next(); } 그리고 다음은 전통적인 for 문으로 배열을 순회하는 코드입니다. for (int i = 0; i < a.length; i++) { ... // a[i]로 무언가를 한다. } 이 관용구들은 while 문보다는 낫지만(아이템 57) 가장 좋은 방법은 아닙니다. 반복자와 인덱스 변수는 모두 코드를 지저분하게 할 뿐 우리에게 진짜 필요한 건 원소들뿐입니다. 더군다나 이처럼 쓰이는 요소 종류가 늘어나면 오류가 생길 가능성이 높아집니다...
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/Pwc8q/btrBx1WeqMe/gNr1CEXkziSpO40GV8Fol1/img.jpg)
이번 아이템은 기본적으로 "클래스와 멤버의 접근 권한을 최소화하라"고 한 아이템 15와 취지가 비슷합니다. 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아집니다. C와 같이 역사가 깊은 프로그래밍 언어 중에는 지역변수를 코드 블록의 첫머리에 선언하는 경우가 많고, 이 방식을 여전히 습관처럼 따르는 프로그래머도 있습니다. 하지만 자바에서는 문장을 선언할 수 있는 곳이면 어디서든 변수를 선언할 수 있습니다. 지역변수의 범위를 줄이는 가장 강력한 기법은 '가장 처음 쓰일 때 선언하기'입니다. 사용하려면 멀었는데, 미리 선언부터 해두면 코드가 어수선해져 가독성이 떨어집니다. 변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있습니다. 지역변수를 생각없..
study date : 2022-02-09, 2022-02-10 🐻 사내에서 진행한 TDD + 객체지향 관련 스터디를 정리한 포스팅입니다. 이번 TDD 스터디에서는 페어 프로그래밍을 다뤘다. 실제로 페어 프로그래밍이 혼자 작업할 때보다 노동 강도가 배로 들었다. 켄트 백과 워드 커닝햄이 페어 프로그래밍을 하다가 TDD에 대한 이론을 떠올렸다고 한다. 페어 프로그래밍 페어 프로그래밍은 보통 두 명이 짝 지어서 프로그래밍을 뜻한다. 드라이버와 네비게이터로 이루어진다. 드라이버 : 소스코드를 타이핑 네비게이터 : 작성되는 소스코드를 실시간으로 리뷰를 하고 큰 그림을 염두에 두고 가이드 정해진 시간을 두고 번갈아가며 역할을 수행한다. 🐻 스터디에서는 5분간 번갈아가며 진행했다. 시간을 정하는 이유는 한 명이 계..
study date : 2022-02-09 🐻 사내에서 진행한 TDD + 객체지향 관련 스터디를 정리한 포스팅입니다. TDD + 객체지향 연습하기 tdd를 비롯한 객체지향을 연습할 수 있는 많은 예제가 있다. 다음에 시간을 내서 볼링게임과 블랙잭게임을 tdd로 구현해볼 예정이다. 볼링게임같은 경우는 밥 아저씨(로버트 세슬 마틴)가 TDD 설명을 위한 예제로도 사용됐다고 알려져 있다. GitHub - msbaek/bowling-game Contribute to msbaek/bowling-game development by creating an account on GitHub. github.com 요구사항 분석하기 이번 스터디 때에는 요구사항 분석하기를 배웠다. 기획자가 다음과 같은 요구사항을 주어졌다고 가..
study date : 2022-01-27 🐻 사내에서 진행한 TDD + 객체지향 관련 스터디를 정리한 포스팅입니다. keyword 더 나은 코드를 위해 노력 ex) 객체지향 생활체조 ParameterizedTest [들어가기 전에] comfort zone을 벗어나자. 계속해서 배움을 멈추지 않고 더 나은 구조를 생각하며 의식적으로 개발을 하여야 한다. SI 개발 10년차인데 코드 좀 봐주세요 | Popit 최근 한국에 머무르는 시간이 길어지면서 Popit 저자 섭외 활동과 병행하여 개발자 멘토링을 꾸준히 하고 있습니다. SI 경력 10년 정도 되는 개발자와 만나서 이야기 한 내용을 대략적으로 정리해 www.popit.kr [요약] 프로젝트 수행을 하면서 사용하는 기술, 발생하는 문제들을 접할 때 의도적..
- Total
- Today
- Yesterday
- 테라폼
- 백준
- Effective Java
- JPA
- Kotlin
- Algorithm
- 클린 코드
- BOJ
- kotest
- 디자인 패턴
- 정규표현식
- 프로그래머스
- 클린 아키텍처
- BAEKJOON
- Spring
- 객체지향
- C++
- AWS
- programmers
- MSA
- kkoon9
- Java
- 디자인패턴
- 이팩티브 자바
- 코테
- Olympiad
- 알고리즘
- node.js
- 이펙티브 자바
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |