코코코딩공부
[JAVA] 제네릭 Generic
들어가며 우테코에서 Generic 관련 미니 미션을 수행하게 되었다. 수행을 하면서 느낀 것은 제네릭에 대해서 대충은 알고 있었지만 자세히 모른다고 생각하게 되었고 한번 정리해볼 필요가 있다고 느꼈다. 제네릭 제네릭이란 클래스를 정의 할 때 구체적인 타입을 적지 않고 변수로 적는 것이다. 제네릭은 모든 종류의 타입을 다룰 수 있도록, 클래스나 메소드를 타입 매개변수를 이용하여 선언하는 기법이다. 타입 매개변수란 타입을 변수로 표시하는 것을 의미한다. 즉 타입을 어떤 클래스의 매개변수로 보는 것이다. 내부 데이터 타입을 외부에서 지정하는 것. 제네릭이 없었다면 ? public class Test{ private Object data; public void set(Object data){ this.data ..
[디자인 패턴] 전략 패턴
들어가며 우테코에서 사다리타기 게임을 하면서 사다리 게임을 직접 실행하는 Game 도메인을 만들었다. 하지만 이 도메인은 하는일이 게임실행 + 결과값 저장 및 도출 기능을 가지고 있는 매우매우 비대한 사이즈의 도메인이였다. 그래서 이 도메인을 줄이기 위해 고민을 했었는데 카프카가 사다리타기 문제에 전략 패턴을 접목할 수 있다고 하여 알아보게 되었다. 사다리타기 클래스를 외부에서 주입해주고 테스트 할 때는 테스트용 사다리타기 클래스를 주입하여 더 간단하게 사용할 수 있을 것 같았다. 전략 패턴 정의 전략 패턴이란 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 여기서 말하는 알고리즘은 하나의 전략 이라고 생각하면 된다. 로직 실행은 인터페이스에 의존을 시키고 인터페이스를 구현한..
[JAVA] 예외 처리
들어가며 나는 지금까지 예외처리에 대해서 깊게 생각해 본적이 없는 것 같다. 단순하게 ‘문제가 생기면 예외를 던진다.’ 라고 생각하며 살아왔던 것 같다. 하지만 우테코에서 예외처리 강의를 듣고 한번 생각 정리를 할 필요가 있을 것 같아서 정리해보게 되었다. 예외(Exception) 와 에러(Error) 예외를 알아보기 전에 먼저 에러와 예외를 구분할 필요가있다. 에러는 코드로 복구 될 수 없는 오류를 의미한다. 개발자가 미리 예측하여 방지할 수 없다. OutOfMemoryError, StackOverflowError 등이 발생한다. 예외는 개발자가 직접 예측하여 막을 수 있는 오류를 의미한다. 개발자의 코드, 로직, 사용자 에 의해 발생 가능하며 방지할 수 있다. 하단 그림은 에러와 예외의 상속 관계이다..
[JAVA] 일급 컬렉션
들어가며 우테코 미션을 진행하면서 일급 컬렉션에 대해서 엄청엄청 많이 들어보았다. 그래서 정리를 해보고자 한다. 일급 컬렉션 일급 컬렉션이란 값 객체(Value Object)를 포함하고 있는 컬렉션이다. 값 객체란 값 그 자체로 의미가 있으며, 변경 불가능하다는 특징을 가지고 있는 것이다. 일급 컬렉션은 이러한 값 객체들을 모아서 하나의 객체로 다루는 것을 의미한다. Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 한다. 일급 컬렉션의 장점 코드 가독성의 향상 값 객체가 포함된 컬렉션을 변수로 사용하는 것보다, 일급 컬렉션으로 묶어서 사용하는 것이 가독성이 더 좋다. 의미 전달력의 향상 일급 컬렉션을 사용하면, 컬렉션의 용도와 의미를 명확하게 전달할 수 ..
[JAVA] 원시값 포장
들어가며 저번 미션부터 원시값 포장에 대한 요구사항들이 많았다. 원시값 포장은 무엇인지에 대해 정리를 해보려고한다. 처음에는 원시값 포장 ? String , int값을 포장한다는 것인가 ? 왜 하지 ? 라는 생각이 많이 들었지만 확실히 원시값 포장을 하는게 더 좋다고 생각이 들었다. 원시값 포장 원시 타입의 변수를 객체로 포장한 것이다. private final String name; public Name(String name) { this.name = name; } public String getName() { return this.name; } 이번 사다리 타기 미션인데 name이라는 단순 문자열을 Name로 포장, 감싸주었다. 이렇게 감싸 주었기 때문에 name을 모아놓는 List또한 변경이 되었다..
[JAVA] equals와 hashCode를 Override 해야하는 이유
들어가며 우테코 사다리타기 미션을 진행하던 중에 값을 비교하기 위해 equals를 사용했다. equals는 단지 값을 비교하기 위해 사용하면 되지 않나 ?' 라는 생각을 가지고 있던 나는 잘못 생각하고 있었다. 그래서 부끄러워서 정리 한번 해보려고 한다. 문제가 되었던 코드 중 하나 private void validateWinner(Names names, String winner) { if (!(names.nameContains(new Name(winner))) { throw new IllegalArgumentException(ExceptionMessage.EXCEPTION_WINNER_RESULT.getExceptionMessage()); } } names내에서 new Name(winner) 로 이루어..
[개발 패턴] TDD
TEST DRIVE DEVELOPMENT 테스트 주도 개발에 대한 많은 이야기를 들었었다. 쓰레기라느니 좋다느니.. 등등 나는 실제로 와닿지는 않았는데 우아한테크코스를 경험하면서 필요성을 느꼈다. 내가 느낀 필요성은 프로덕션 코드를 작성하고 테스트 코드를 작성하면 테스트하기 너무 힘든 메소드 같은 것들이 생길 때 필요하다고 느꼈다. 먼저 테스트 코드를 짜고 프로덕션을 맞춘다면 충분히 좋게 테스트코드를 짤 수 있다고 생각했다. TDD란 Test First Development + 리팩토링을 의미한다. TEST -> FEAT -> REFACTOR 가 반복된다고 생각한다. TDD 하는 이유 디버깅 시간을 줄여준다. 동작하는 문서 역할을 한다. 변화에 대한 두려움을 줄여준다. TDD 원칙 1. 실패하는 단위 테..