본문 바로가기

이전블로그글 이사중

(10)
[Java] 불변 객체 (Immutable Class) 2021-02-15 글 불변 객체 (Immutable Class)란? 불변 객체란 말 그대로 변경이 불가능한 객체이다. 객체를 생성 후 외부에 의해 그 상태를 바꿀 수 없다. 여기서 바꿀 수 없다는 것은 heap 영역에서 그 객체가 가리키고 있는 데이터 자체의 변화가 불가능 함을 의미하며 stack에 있는 주소값을 다른 주소값을 가리키도록 변경하는 것은 문제 없다. ➕ 여기서 말하는 heap 영역이란 무엇인가? 간단하게 말해 원시타입(int, boolean 등)은 그대로 stack 영역에 올라가지만, 참조변수를 가지고 있는 타입(Object, Array 등)은 그 실제 데이터들은 heap 영역에 저장하고 이 주소값을 Stack 영역에 가지고 있다. 예시로 String name = "amazzi";에서 n..
[Java] String vs StringBuffer vs StringBuilder 2021-02-15 글 자바의 불변 객체를 공부하다가 String 과 StringBuilder가 예시로 자주 등장함을 보게 되었다. 나도 Java를 제대로 공부한지 얼마 안되서, 사실 String, StringBuffer, StringBuilder의 명확한 차이를 잘모르고 그냥 가져다 썼는데, 자바의 정석을 읽어보니 이 String이 굉장히 흥미로워서 👀 이번 기회에 명확히 정리하고 가는 것이 좋다고 생각했다. String String은 참 특이한 존재이다. 다른 언어에서 문자열이란 대부분 char형의 배열로 다루는데, 자바에서는 이 문자열을 위한 클래스가 존재한다는 것이다. 이 String 클래스를 깊게 보기 위해 String 클래스가 어떻게 이루어져 있는지 들여다보자. String.java 일부 pu..
[코드 리뷰 정리] Level 1. 자동차 경주 게임 2021-02-15 글 우테코 레벨 1 난생 처음으로 코드리뷰를 받게 되었다. 사실 TDD도 처음이고, 누군가 내 코드를 읽고 피드백 받는 것 또한 처음인데 이런 기회가 정말 감사하면서도 떨렸던 첫 리뷰 요청이었다 👀 코드 리뷰를 받으니 내가 모르는 부분과 나의 실수들을 명확히 볼 수 있었다. 또한 리뷰를 보니 나의 잘못된 코딩 습관도 발견할 수 있었다. 덕분에 고민하고 공부해봐야 할 것들을 알 수 있어 정말로 나에게 너무나도 큰 도움이 되었다 🙇‍♂️ 피드백 받은 부분에서 계속 머릿 속에 박기 위해 몇 가지는 정리하고 넘어가는 것이 좋을 것이라 판단이 되었다. 불필요한 객체 생성을 피하라 Pattern 객체는 비싸다 나는 지금껏 올바른 숫자인지, 문자인지 등을 검증할 때 대부분 Pattern 객체를 정..
[Effective java] item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 2021-02-14 글 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 디자인 패턴의 팩터리 메서드와는 다르다. 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 하지만 정적 팩터리 메서드는 반한될 객체의 특성을 메소드명을 통해 드러낼 수 있다. Exmaple - 생성자 public Cars(List names) { validateNonDuplicatedNames(names); for (String name : names) { cars.add(new Car(name)); } } private void validateNonDuplicatedNames(final List names..
[Java] 배열의 깊은 복사와 얕은 복사 2021-02-10 글 자바에서의 객체 복사 자바에서 객체를 복사하는 유형에는 얕은 복사와 깊은 복사가 있다. 얕은 복사 단순히 객체의 주소 값만을 복사하는 것이다. 때문에 실제로는 하나의 주소 값만을 가지고 서로 간의 값은 바뀌지 않는다. 대부분 객체를 복사한다는 말은 얕은 복사가 아닌 깊은 복사를 의미한다. Example public class Array_Shallow_Copy{ public static void main(String[] args) { int[] arr1 = { 1, 2, 3}; int[] arr2 = arr2; } } = 연산자는 주소를 이어줌을 의미하는데, 위 예제는 a의 배열을 b배열로 = 연산자를 활용하여 대입했기 때문에 얕은 복사가 된다. 즉 같은 주소값을 가진다. (참조에 ..
[OPP] 머리에 박제할라고 진짜 간단히 정리한 일급 컬렉션 2021-02-09 글 일급 컬렉션 일급 컬렉션의 개념을 좀 더 정확히 짚고 넘어가야 할 것 같았다. 1차 리뷰어님께서 첨부해 주신 글을 저번에도 읽어보았으나 그 때까지는 이 글의 모든 개념을 파악하기 어려웠다. 때문에 훌라당 읽고 넘어갔지만 🥲 이번에 정독해보니 머릿 속에 개념과 목적이 좀 더 명확하게 잡혔다. 내 머릿 속에 박을라고 내가 이해한대로 진짜 간단하게 정리하는 글 ✍️ 참고 자료 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유 일급 컬렉션? 다른 멤버 변수가 없이 오로지 콜렉션만 포함한 객체. 한마디로 Collection을 클래스로 Wrapping 한 것이다. 비즈니스에 종속적인 자료구조 collection의 값을 비즈니스 로직이 서비스 메소드에 들어가 있을 ..
[IntelliJ] 인텔리제이를 인텔리제이답게 - Mac 단축키 2021-02-07 글 사실 인텔리제이를 쓰면서 사람들이 왜 인텔리제이가 편하다고 하는 걸까 의문이었다. 하지만 우테코를 진행하면서 몇 가지 단축키를 배우니 굉장히 유용한 것 . . . 인텔리 제이에서 제공하는 영문 Key Map Reference를 정리하면서 나도 내게 유용한 기능들을 익혀보려 한다. 참고로 Key Map Reference는 인텔리제이의 `Help > Key Map Reference` 에 있다. Editing 단축키설명 ^Space 기본 자동 완성 ^⇧Space 스마트 자동 완성 ⌘⇧Enter static 메소드 자동완성 ⌘P 파라미터 정보 F1 Doc 간략 보기 ⌘N Getters, Setters, Constructors, hashCode/equals, toString 자동완성 ^O ..
[assertJ] 공식문서와 함께하는 assertJ 정리 2021-02-05 글 JUnit5으로 테스트 코드를 작성하면서 assertion을 주는 도구로 assertJ를 배웠다. 새로 깨닫게 된 것은 정리하며 익히자. assertJ? Java 테스트에서 유창하고 풍부한 assertions를 작성하는 데 사용되는 오픈 소스 커뮤니티 기반 라이브러리 지원 Standard Java Java 8 Guava Joda Time Neo4J and Swing components Assertions 작성 Assertions.assertThat()에 object를 전달하면 assertion을 받을 수 있다. Obejct Assertions Obejct는 두 객체의 동일성이나 객체의 필드를 조사하기 위해 다양한 방법으로 비교할 수 있다. Example 두 Dog의 객체인 fido..