분류 전체보기

    [Spring] 스프링의 탄생목적 - SOLID, DI 컨테이너

    이번 포스팅은 앞으로 스프링을 제대로 학습하기에 앞서, 스프링이 어떤 목적을 가지고 탄생했는지 알아보려고 합니다. 스프링을 왜 만들었을까 스프링은 좋은 객체지향 어플리케이션을 개발할 수 있도록 도와주는 프레임워크 입니다. 개발자들은 객체지향 프로그래밍을 통해 유지보수에 좋은 코드를 작성하려고 노력했습니다. 그래서 좋은 객체지향을 위한 5가지 원칙 (SOLID) 가 탄생했습니다. 객체지향프로그래밍의 5가지 원칙 SRP (Single Responsibility Principle) 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. ‘한 클래스가 하나의 책임만 가져야 한다’ 라는 말만 보면 의미가 모호할 수 있습니다. 그래서 SRP의 중요한 기준은 변경이 있을 때 파급 효과가 적도록 만드는 것입니다. 예..

    우테코 레벨1 생활기

    시작 올해는 함께 자라기라는 목표를 세우고 달리기로 결심했었다. 우아한테크코스에 합류하기 전 1년간은 혼자서만 열심히 공부했다. 누군가와 프로젝트를 하기엔 아직 부족하다고 생각했다. 잘하는 사람과 같이 하고 싶으면 내가 먼저 잘해져야겠다고 생각했다. 한참을 혼자 공부하다 보니 내가 공부하고 있는 속도가 맞는지 궁금했고, 공부하는 방향이 맞는지도 궁금했다. 하지만 이제는 다르다. 우아한테크코스에서 함께 자라기의 성장 속도는 지난 1년간의 혼자 자라기와는 차원이 다르게 빠르다. 그래서 지난 한 달간, 아니 약 두 달간 경험했던 우테코가 함께 자라는 방식을 적어보고자 한다. 아싸인 내가 사람들과 잘 어울릴 수 있을까 지난 일 년간 아싸코딩을 해왔다. 우테코 합격 메일을 받은 날 정말 날아갈 듯이 기뻤다. 동시..

    나는 체스 미션을 통해 무엇을 얻었을까

    상태패턴 2022.03.27 - [회고/우아한테크코스] - 나는 블랙잭 미션을 통해 무엇을 얻었을까 지난번 블랙잭 미션에서 네오의 상태패턴 강의를 듣고 다음 미션에 꼭 적용해야겠다고 생각했습니다. 체스미션에서는 기물마다 행마법이 달라야 합니다. 그리고 기물이 한번 움직였는지 아닌지에 따라서도 행마법이 다릅니다. 룩, 비숍, 나이트, 퀸, 킹, 폰 은 "기물"이라는 객체이지만 체스판 위에서 움직일 수 있는 행마법이 다릅니다. 게다가 폰은 한번도 움직이지 않았을 때만 앞으로 2칸을 움직일 수 있고, 한번이라도 움직였으면 1칸만 움직일 수 있습니다. 그래서 저는 기물들이 상태를 갖고있고 상태에다가 어디로 갈 수 있는지 물어보면 되겠다고 생각했습니다. 네, 현재 상태에 메서드를 요청하고 객체가 다음 상태를 갖도..

    나는 블랙잭 미션을 통해 무엇을 얻었을까

    시간이 좀 지나고 회고하는거라 큼지막한 피드백 위주로 회고를 작성해보려 합니다. 상속하는 객체들과의 관계설정, feat. 추상클래스 Gamer 클래스를 Player, Dealer가 상속받고 있었습니다. Gamer 클래스를 통해 인스턴스를 생성할 수 있지만 이 행위는 제가 의도하지 않은 행위였습니다. abstract를 모르고 상속을 사용했기 때문에 이러한 피드백이 왔다고 생각합니다. 객체간의 공통점이 보인다면 묶을 수 있습니다. 묶는 방법은 대표적으로 상속 : 동일하게 행동하는 인스턴스를 그룹화해 계층적으로 설계하고 싶다면 사용한다. 조합 : 단순히 공통메서드를 묶고 싶을 때 사용한다. 이 있습니다. 상속을 이용한다면 상위클래스 자체로 인스턴스를 생성하는 것을 막기 위해 상위 클래스를 abstract로 선..

    [Java] Optional 반환값 도대체 어떻게 사용하라는 걸까?

    Optional에 대한 기본적인 정의나 상세한 설명은 다른 블로그에도 설명이 잘 되어있습니다. Optional에 대해 기본적인 숙지를 하시고 보시길 추천드립니다. 블랙잭 미션에서는 로또미션과 다르게 Enum에 쓸모 없는 인스턴스를 두지 않았습니다. 그래서 반환타입에 처음으로 Optional을 사용했는데 get()을 사용해야할 지 orElse()를 사용해야할 지 orElseThrow()를 사용해야할 지 Optional로 반환해 클라이언트에게 책임을 넘기고, 클라이언트는 어떻게 사용해야할 지 앞으로 사용할 방법을 정형화 하기 위해 포스팅을 했습니다. 로또미션 OTHER (나머지) 라는 인스턴스가 존재합니다. public enum Rank { OTHER(0,false, 0), FIFTH(3, false, 5_..

    [Java] for-loop 와 stream.forEach() 는 다르다.

    Java8 에서 Stream이 도입되었습니다. Stream으로 인해 기존의 코드를 더 깔끔하고 가독성있게 바꿀 수 있게 되었습니다. // for-loop for (String item : list) { System.out.println(item); } // stream forEach list.stream().forEach(System.out::println); 하지만 모든 for-loop를 Stream의 forEach로 바꿔도 될까요? " 아닙니다. " 크게 세가지로 모든 for-loop를 forEach로 바꾸지 말아야 할 이유를 소개합니다. 첫번째로 확인해야 할 것은 "굳이 forEach를 사용해야 하는가" 입니다. list.stream().forEach(item -> { if (item.equals(..

    [Java] java.lang.String의 isEmpty() vs isBlank()

    java.lang.String 에는 isEmpty() 와 isBlank() 가 있습니다. 두 메서드는 메서드명만 봤을 때 언뜻 비슷해보이지만 분명한 차이가 있어서 사용할때 정확히 알고 사용하면 좋습니다. isEmpty() 문자열의 길이가 0인 경우에, true를 리턴합니다. isBlank() 문자열이 비어 있거나, 빈 공백으로 이루어져 있으면 true를 리턴합니다. (java 11 이후에 사용이 가능합니다.) isBlank()의 동작방식을 보면 어떤 역할을 하는지 이해하기 쉽습니다. isBlank()는 whitespace(공백)이 아닌 문자의 인덱스와 문자열의 길이를 비교합니다. 빈문자로만 이루어져있는 경우에 nonWhitespace() == length() 이기때문에 true가 리턴됩니다. 마찬가지로,..

    [우테코 프리코스] 최종시험 + 최종합격

    최종시험 일시 : 2021.12.18(토) 13시 ~ 18시 난이도 : 3주차보다 약간 쉬웠던 수준 3주차 과제를 쉽게 변형시켜낼 것이라는 예상과 다르게 아예 새로운 문제가 나왔습니다. 최종시험문제보기 상심할 시간도 없이 문제 이해하고, 설계하고, 기능목록을 작성했습니다. 최종시험 보기전까지 탑다운 방식으로 개발하는 것을 연습했기 때문에 연습한 대로 진행했습니다. 스트림 사용법도 공부해서 바로 실전에 적용했습니다. 시작하자마자 당황했던건 파일입력을 받아야하는 것이었습니다. 파일입력을 직접 구글링하며 방법을 찾고 적용해야했는데, 여기서 시간을 굉장히 많이 썼습니다. 생각보다 Enum 클래스를 만들어서 사용할 일이 많았는데 지난 프리코스 3주차동안 enum은 문제에서 제공해준 Coin enum만 사용해봤기 ..

    돌아보는 2021

    내 성격이 도전적인 성격이 아니었던 터라 도전적인 삶을 살았다고 생각하지 않았는데, 다시 돌아보면 인생을 걸고 과감한 판단을 몇번 내렸던 것 같다. (사실 남들이 보기엔 과감하지 않을 수 있다.) 내 첫 도전은 고3때 수능의 한 과목(수리영역)을 버리고 나머지에 집중하는 전략을 세웠던 것이다. 지금 돌아보면 그 판단을 세울 수 밖에 없었지만 인생에서 중요한 시험에서 어느 경우의 수에 도박을 거는 것은 나름 도전적이라고 생각한다. 두번째 도전은 형이 하는 일을 사업화 시킨 일이다. 쇼핑몰 홈페이지 관리 알바를 했던 경험으로 형이 하던 교재판매사업을 시스템으로 만들었다. 내 인생은 아마 이 사업을 시작했던 기점으로 나뉘었을지도 모른다. 두번째 도전은 세번째 도전을 결정한 계기가 되었다. 세번째 도전은 휴학결..

    [앞으로의 계획] 21년 연말

    우테코 최종시험이 끝나고 4일간 코드는 한 줄도 작성하지 않고 있었습니다. 해야될 건 많은데 무엇부터 해야될지 모르는 상태에서 섣불리 시작할 수가 없었습니다. 이번주동안 코드는 작성하지않고 책을 한권 읽었고 42서울 포인트를 모으기 위해 부랴부랴 슬롯을 열어놨습니다. 이대로 머리속이 정리가 되지 않는다면 계속 늘어질 것이 뻔했고, 이쯤에서 계획정리를 한번 하고 넘어가야 남은 기간을 더 알차게 보낼 수 있을 것 같습니다. 우테코 합격 ver. 가장 희망적인 계획부터 세워보겠습니다. 우테코 시작날짜는 2월 8일(화) 입니다. 42서울과 병행이 가능한 경우 1서클까지는 끝내야합니다. (과제 4~5개) 1서클 끝내는 것만해도 상당한 시간이 소요되기 때문에 다른 프로젝트가 불가할 것입니다. 결론 : 42서울 과제..