💋 제네릭이란? 데이터의 타입(data type)을 일반화(generalize)하는 것을 의미한다. 💋 제네릭 사용 이전의 코드 ArrayList values = new ArrayList(); values.add("this is string"); values.add(1); values.add(new Position(1, 2)); String first = (String) values.get(0); int second = (int) values.get(1); Position third = (Position) values.get(2); 제네릭을 통해서 타입을 지정하기 이전의 세상은... 이렇게 리스트가 자유로웠다! 한 리스트에 String, int, 참조타입 등등 원하는건 다 넣을 수 있었다. 완전 좋은거 ..
분류 전체보기
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA2TaV%2Fbtr6eVZ8Vyp%2FAwCkV8FfpzOndxjfztHuPk%2Fimg.png)
이번 리뷰어였던 디디는 예외 메세지에 대한 피드백을 몇 개 달아주었다. 달아주면서도 예외 처리에 대한 부분은 아직 감이 잘 오지 않을 것이라고 말해주긴 했지만 이번에 알게된 몇 가지를 정리해 보았다. 💋 예외 처리는 조심스럽게... 내가 받은 리뷰이다. RuntimeException 전체를 한번에 잡아서 message를 출력해주는건 어플리케이션의 취약점을 노출할 수 있는 포인트가 될 수 있어요. 예를들면 SQL 관련된 Exception의 메세지를 그대로 view에 보여줘서 사용자가 데이터베이스의 constraint 예외 메세지를 받을수도 있거든요. catch문을 좀 더 세분화 해서 잡아서 원하는 동작을 하도록 하는것도 일종의 방법일 수 있습니다. 혹은 예외메세지를 view로 보여주지 않고 공통된 메세지가..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvWZ8r%2Fbtr6GVTZ3bx%2FRfbW0CiUNf22ARcTKSWNYk%2Fimg.png)
💋 원시값 포장 원시값 포장은 String, int 등등 원시타입의 값을 이용해 속성을 표현하지 않고, 의미가 있는 객체로 포장한다는 개념이다. String name = "깃짱"; // 원시타입으로 속성을 표현 Name name = new Name("깃짱"); // 원시값을 포장해서 속성을 표현 원시값 포장을 하면 클래스 내부에 검증 로직을 만들어서 스스로 상태를 관리하게 되어 책임을 분리할 수 있다. 결과적으로 객체의 책임이 더 명확해진다. 또 원시값 포장을 하지 않으면 외부에서 검증해야 하는데, 이렇게 되면 검증 과정을 거치지 않고 값을 사용할 수 있게 된다. 원시값 포장을 하면, 객체를 사용해야 하는 경우에 늘 내부에서 검증하기 때문에, 비즈니스 로직 전반에서 포장값을 사용함으로서 항상 신뢰를 확보..
⭐ 레벨1 인터뷰를 준비하며 드디어 약 두 달 간의 우테코 레벨1 생활을 마치고, 오늘 이리내, 오잉, 제나와 만나서 인터뷰를 준비하고 있다. 그동안 학습한 내용들을 바탕으로, 짧게 키워드를 정리해 보았다. 키워드에 대해 질문하고 싶은 것이 있다면 댓글로 남겨주세요! 💋 자동차 경주 미션 ✔ 페어 프로그래밍 페어 프로그래밍은 페어와 함께 설계와 구현의 모든 과정을 진행하는 방식이다. 페어 프로그래밍을 통해 생산성이 향상되는 경우가 많다고 한다. ✔ 단위 테스트 단위테스트는 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 것이다. ✔ 네이밍의 중요성 네이밍은 너무 짧아도 좋지 않다. 정확하게 역할을 설명하는 이름을 지어주는 것이 좋다. 이름을 통해서 의도를 드러내는 것이 좋다. ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLUGkl%2Fbtr59ZvJInZ%2F6E5C3cMWw4Qs6edI8lmK5K%2Fimg.png)
💋 TDD에 대한 생각 TDD를 처음 적용해서 설계를 할 때는 굉장히 어려웠다. TDD의 아이러니 중 하나는 테스트 기술이 아니라는 점이다. TDD는 분석 기술이며, 설계 기술이기도 하다. - 켄트벡, Test Driven Development by Example 중 특히 처음에는 이 말이 너무너무 어려웠다. 나에게 TDD는 테스트 코드를 먼저 짜는 것 뿐이었다. TDD가 설계 기술이라는 것을 인지하지 못한 채, 테스트 코드부터 짜기 위해서는 내가 테스트하고 싶은 메서드의 시그니처(파라미터, 반환값의 타입)는 반드시 알아야 했다. 굉장히 작게 어떤 메서드를 테스트한다는 생각만 가지고 있어서 오히려 더 설계를 방해했던 것 같기도 하다. 하지만 지금 느끼는 TDD는 다르다. 우선, 설계부터가 중요하다. 한 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwbPYe%2Fbtr53DGeZGE%2Fyw86Q7widBVfvPyVUtoJY1%2Fimg.png)
💋 단위 테스트에 대한 생각 내가 단위 테스트를 작성하는 이유는 무엇인가? 단위 테스트를 작성하면 마음이 편안하기 때문이다. 리팩터링을 할 때에도 어떤 부분에서 문제가 될 지에 대해 걱정하지 않고 코드를 수정할 수 있다. 세부 구현에 대해 코드 품질을 높일 때 특히 효과적이라고 생각했다. 하지만 이번 체스 미션 중에 단위 테스트를 빗겨가는 케이스를 두 번이나 생각해내지 못했고, 테스트 코드의 맹점은 완벽하지 않은 테스트가 신뢰될 때라는 것을 깨달았다. 앞으로는 조금 덜 맹신하면서 테스트 코드를 작성할 필요가 있을 것 같다. 항상 놓치는 케이스가 없는지 신경쓰면서 작성해야겠다. 내가 작성한 좋은 단위 테스트는 어떠한 부분에서 좋은 단위 테스트라 느꼈는가? 단위 테스트 첫 강의 때도 언급했었지만, 나는 프로..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmm4FC%2Fbtr6g9iFN2U%2FC80xs4xKEiqAdKPJESEKg0%2Fimg.png)
컬렉션 프레임워크의 List를 정렬할 때 사용되는 Collections.sort()에 대한 포스팅이다! 👍🏻 요약 Collections.sort(List이름): 기본 정렬 기준으로 정렬한다. Collections.sort(List이름, Comparator): Comparator 인터페이스를 구현한 인스턴스에서 지정한대로 정렬한다. 아래는 예시 코드이다. List animals = new ArrayList(List.of("깃짱", "오잉", "이리내", "허브", "주노", "제나")); Collections.sort(animals); System.out.println(animals); // [깃짱, 오잉, 이리내, 제나, 주노, 허브] Collections.sort(animals, (o1, o2) -> ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpjmm1%2Fbtr5PFRz9TN%2FKs6U7oYFZ6xPATpLH5aBg0%2Fimg.png)
💋 다중 기본키가 왜 필요함? 오늘 이리내랑 JAVA로 만든 체스 게임을 DB에 연결하고 있었다. 체스판에서 각 위치를 A1, A2, A3,...,B1,B2,...H8라고 부르는데, 우리는 각 위치에 체스말(Piece)의 종류(King, Queen, Knight...)와 그 색깔(Black, White)을 저장하고 싶었다. 아마도 두 가지 방법이 있을 것이다. 1. A,B,C...H(File)과 1,2,...8(Rank)를 다중 기본키로 설정하는 방법! 만약 내 코드가 이 두 가지를 Position이라는 클래스 내에서 별도로 관리중이라면 굉장히 유용할 것이다. 이 경우 다중 기본키를 지정한 테이블을 만들어야 한다. 💋 다중 기본키 테이블 만들기 (SQL) CREATE TABLE chess_game( po..
💋 화살표 ↗ ↙ ↖ ↘→ ← ← ↑ ↓ ↔ ➡⬅⬆⬇↗↘↙↖↕↔ ⇐⇑⇒⇓⇔➡⬅⬇⬆ ➩➪➫➬➭➮➯➱ ⇚⇛ ⇽⇾⇿ ⇦⇧⇨⇩⇪⌅⌆⌤⏎ ⇕⇖⇗⇘⇙ 💋 하트 ❤🧡💛💚💙💜🖤🤍🤎💔❤🔥❤🩹❣💕💞💓💗💖💘💝 💋 아이폰 이모티콘 ‼❌👍🏻💋🍑✔☑🍎🍏🌈⭐ 💋 연산 기호 ➕➖➗✖
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbipfn4%2Fbtr2tCiKr2a%2FGfyZ4UbkPWR0FKDeg8pmwk%2Fimg.png)
우테코의 미션은 계속 누적된다. 첫주차부터 했던 페어 프로그래밍, 단위 테스트, TDD 모두 누적해서 미션을 구현했다. 💋 상태 패턴 사용 피드백2 강의를 듣기까지 구현을 못했는데, 그래서 이미 상태 패턴을 사용하는 방법을 강의에서 봐 버렸다. 그냥 본 김에 네오를 따라 상태 패턴을 사용해봤다. 장단점을 좀 느꼈는데, 현재까지 내가 느낀 것은 아래 내가 코드리뷰에 남겼던 이야기대로다. 상태 패턴에 대해서 한 번 포스팅 해야겠다! 💋 클래스, 메서드의 abstract, final 제어자를 잘 활용하자 이번 미션에서 상속을 자주 활용하다 보니 제어자 abstract, final에 대해 제대로 이해할 수 있었다. 앞으로 모든 클래스를 abstract나 final 둘 중 하나로 만들기로 다짐했다! 💋 쉽게 계산..