Archive: 2022

불필요한 객체 생성을 피해라

요약 변경되지 않는 객체를 사용할 때마다 새로운 객체를 만들지 말자. 불필요한 객체 생성을 하는 예시String12String bad = new String("bikini"); //안좋은 예시String good = "bikini"; //무난한 예시 new String(“bikini”)로 문자열을 만드는 경우 불필요

조합으로 체스 말 이동 범위 검사하기!

요약 체스 말 객체들이 해당 위치로 이동할 수 있는지 검증하는 로직이 중복된 경우가 있었다.이를 따로 분리해서 중복을 제거하고자 했다. 도입 배경체스 말 종류 구현하기체스 말 객체(Piece)는 자신의 위치와 이동할 위치를 전달받아서 이동할 위치로 이동할 수 있는지 확인한다. 123456789101112131415161718192021public abs

Java의 Call by Value

요약 자바에는 Call by Value만 존재한다.Call by Value는 함수의 인자에 값을 전달하는 방식이고,Call by Reference는 함수의 인자에 주소를 전달하는 방식이다. Call by Value vs Call by Reference프로그래밍 언어에서 함수에 인자로 전달하는 방식에 따라 나뉜다. Call by ValueCall by V

상속과 조합

상속의 위험성상속은 중복코드를 없애고 코드 재사용을 하기 위해 등장한 개념이다.내가 필요로 하는 클래스와 매우 유사한 클래스가 있다면 해당 클래스를 상속하면 같은 코드를 여러번 쓸 필요가 줄어든다. 상속은 코드 재사용을 위해 캡슐화를 희생시킨다. 부모 클래스의 코드를 재활용하기 위해 자식 클래스도 재활용할 코드를 모두 공개되기 때문이다. 경고 1. 자식

클린코드를 위한 함수

함수는 한 가지만 해라!함수에 적힌 코드들의 추상화 수준이 같은 단계로 통일시켜라는 의미다.혹은 함수 내에서 의미있는 이름으로 다른 함수를 추출할 수 있으면 그 함수는 여러 작업을 하는 셈이다. 12345678910111213public Lotto createLotto(List<String> tokens) { List<Inte

클린코드를 위한 의미 있는 이름

의도를 분명히 밝혀라 변수(혹은 함수나 클래스)의 존재 이유가 무엇인가? 어떤 일을 수행하는가? 어떻게 사용하는가? 이름으로 위 세가지가 표현이 안된다면 문제가 있다. 변수의 이름은 범위 크기에 비례해야 한다.123456int pricePerLotto = 1000;int Prizesum = 0;for (Lotto lotto : lottos) {

자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

요약 클래스가 내부에 특정 자원에 의존하고, 그 클래스의 행동이 특정 자원에 따라 영향을 많이 받으면, 싱글톤과 정적 유틸리티 클래스로 구현하면 안된다.이런 영향력이 있는 자원을 클래스 내부에서 만들면 안된다.대신 이 자원(혹은 자원을 만드는 팩토리)을 해당 클래스를 인스턴스화 할 때 넘겨주자. 자원을 직접 명시하는 잘못된 예시 - 정적 유틸리티 &am

인스턴스화를 막으려거든 private 생성자를 사용해라

인스턴스화하지 않으려는 클래스?객체지향적이지 않지만 필요할 때가 있다.java.lang.Math, java.util.Array 같이 기본 타입 값이나 배열 관련 메서드를 모아둔 곳java.util.Collections와 같이 특정 인터페이스를 구현한 객체를 생성하는 정적 메서드를 모아둔 곳.final 클래스와 관련된 메서드를 모아놓을 때. (final 클래

자바 제네릭과 와일드카드 튜토리얼

요약 본 포스트는 오라클 자바 튜토리얼 제네릭 부분을 공부한 내용을 적은 포스트이다.JDK 8 기반으로 작성됐다. https://docs.oracle.com/javase/tutorial/java/generics/why.html 제네릭은 왜 쓰는가제네릭은 클래스, 인터페이스, 메서드를 선언할 때 타입(클래스, 인터페이스)도 매개변수로 만들 수 있다.전통적

Enum에서 메서드 참조와 BiFunction 사용하기

요약 int matchCount와 boolean bonusMatch를 BiFunction를 통해 해당 Enum 객체를 찾을 수 있다. 문제 배경 (안좋은 사례 모음) 로또 순위를 Enum LottoRank로 등수와 상금을 관리하고자 한다.LottoRank가 맞춘 번호 갯수와 보너스 번호 맞춤여부를 전달받아 등수를 판별해야 한다. LottoRank에

Junit으로 parameterized test

요약 @ParameterizedTest 어노테이션과 함께 @MethodSorce나 @ValueSource를 통해 한 테스트 메서드에 여러번 파라미터를 넘길 수 있다. @MethodSource 도입 배경 자동차 이름의 글자 갯수가 5개 이하여야 하고, 자동차 이름이 빈 문자열이면 안되고 등등 다양한 제약 사항을 테스트해보고 싶다고 하자.근데 테스트 코드

우아한테크코스 자동차 경주 미션 회고

아직도 내가 모르는 게 이렇게 많다니. 우테코 첫 미션을 하면서 배운 것도 많지만 그보다 더 많이 내가 모르고 있다는 걸 알게됐다.같이 공부하는 크루들도 출중한 사람이 엄청 많았다. 그에 비하면 내 코드는 뭐… 바보 같을 때가 많았다. 페어 프로그래밍으로 같이 하면서, 처음엔 나 혼자하는게 더 빠르지 않을까 싶기도 했었는데,같이하는 페어의 독특한 생각을 많

자바의 예외 Throwable, Error, Exception

요약 Throwable -> Exception -> RuntimeException 등 다양한 예외Throwable은 stackTrace 생성 등 예외에 필요한 다양한 일을 함Exception은 예외 메시지를 받아 초기화할 수 있다RuntimeException은 치명적이진 않은 예외를 뜻함.RuntimeException은 치명적일 수 있는 에외

자바 사용자 정의 예외 만들기

요약 예외를 상속하는 클래스를 통해 예외를 만들 수 있다.생성자를 통해 에러 메시지를 초기화 할 수 있다. 배경 12345public void checkCarNameEmpty(String carName) { if (carName == null || carName.equals("")) { throw new R

자바 일급 컬렉션 활용해보기

요약 일급 컬렉션은 컬렉션 객체를 감싸는 객체를 말한다.일급 컬렉션은 객체를 만들 때 검증해야 할 로직을 모아 둘 수 있다.일급 컬렉션은 해당 컬렉션이 행해야 할 책임을 모아 둘 수 있다. 불변성을 지키기 위해서는 setter 금지. 일급 컬렉션의 멤버 변수를 초기화할 때 가져온 인자를 새로운 주소값으로 재할당 getter 할 때 불변 객체 반

자바에서 정규 표현식 잘 활용하기

요약 Pattern 클래스와 Matcher 클래스를 활용해서 자바 정규 표현식을 잘 표현한다. 특히 Matcher클래스에 정규 표현식을 compile(String)하고, matcher(String)으로 대상 문자열을 전달해준다.이때 find()메서드를 반드시 실행해줘야 정상적으로 Matcher 객체에 관련 내용이 할당된다!! Pattern 클래스로 정규