본문 바로가기

전체 글

(68)
그동안 미뤄왔던 프로젝트들 드디어 다시 개발시작..!!! 그동안 회사, 취준, 할머니 등등 여러 이유들로 프로젝트들을 방치했었고, 만들어보고 싶었던 서비스들을 마음껏 개발못했던 것 같다.. 최근에 여유가 생기게 되어, 천천히 시작하고 있다ㅎ [1] Deathnote.gg 미뤄왔던 서비스중에 가장 애정하는 건 Deathnote.gg다 일단 배포도 했었고, 유저도 있었고, 정말 재미있게 개발했던 서비스여서 너무 하고 싶었다..! 일단, 지금 제대로 동작을 안하고 있는 상황이여서 살펴보니 사용중인 Riot API가 대대적으로 업데이트가 됨에 따라 기존에 사용하던 API의 Endpoint가 Deprecated되어서였다. 흠.. 일단 글을 쓰는 오늘 조금 뜯어보고 수정했는데, 로직을 대대적으로 수정해야하는 상황이라 완료는 못했다. 얼른 수정해서 배포하려한다. 좀 놀랐던..
프로그래머스 오픈채팅방 JAVA Link https://programmers.co.kr/learn/courses/30/lessons/42888 Review 간단한 구현 문제 Source package programmers.kakao_blind_2019; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class _1번_오픈채팅방 { static final String ENTER = "Enter"; static final String LEAVE = "Leave"; static final String ENTER_FORMAT = "%s님이 들어왔습니다."; static final String LEAVE..
프로그래머스 표편집 JAVA 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 적절하게 자료구조를 잘 활용해서, 푸는 문제. 시간복잡도를 잘 고려하면서 풀어야 한다. 소스 코드 package programmers.kakao_internship_2021; import java.util.Stack; public class _3번_표_편집 { public String solution(int n, int k, String[] cmd) { Stack removed = new Stack(); int ..
5. Function Structure Part2 https://www.youtube.com/watch?v=cgiDv1XFWsk&list=PLagTY0ogyVkIl2kTr08w-4MLGYWJz7lNK&index=5 🧐 CQS Command 와 Query는 구별되어야 한다!! Command ( 상태를 변경 ) 시스템의 상태 변경 가능 Side Effect를 갖는다. 아무것도 반환하지 않는다. void형이다. Exception은 반환하더라도 어떤 값을 반환하면 안된다! Query ( 값을 반환 ) Side Effect가 없다. 계산값이나 시스템의 상태를 반환한다. 예시 1 // CQS가 적용안된 상황 User u = authorizer.login(userName, password); // CQS 적용 authorizer.login(userName, pass..
4. Function Part2 https://www.youtube.com/watch?v=yd2xcVn_pAc&list=PLagTY0ogyVkIl2kTr08w-4MLGYWJz7lNK&index=4&t=4s 🙋‍♂️ Reader를 위해서 원칙을 지켜 코딩하자 원칙을 잘지키다보면, 디자인이 예뻐진다. 큰 함수를 여러 개의 클래스로 쪼갤 수 있다. 함수는 한가지만 해야되고, 그 한 가지를 잘해야 한다. 코드에서 젤 중요한 사람은 Reader다. 한 번 코딩해서 그 코드가 살아 있는 코드가 되면 그 코드는 다른 사람들이 내 코드를 계속 읽어야 된다. 이를 위해서 계속해서 Reader을 위하는 마음으로 코드를 작성해야 한다. 하지만, 추상화 레벨은 불분명하다. 🙋‍♂️ 추출은 지독하게 하자 "Extract Till you Drop" 포기할 때까..
3. Function https://www.youtube.com/watch?v=GYNT7O3rLhU&list=PLagTY0ogyVkIl2kTr08w-4MLGYWJz7lNK&index=3 함수는 한가지 일만 해야 한다. indentation , while, nested if 등은 없어야 잘 지어진 서술적인 긴 이름을 갖는 많은/작은 함수들로 유지해야 한다. The First Rule of Functions 더 이상 작아질 수 없을 만큼 작아야 한다. 큰 함수를 보면 클래스로 추출할 생각을 해야한다. 클래스는 일련의 변수들에 동작하는 기능의 집합 함수는 최소한의 parameter를 가지는 것이 좋다. 인텔리제이의 introduce variable, method등등의 기능을 활용하여서, 동일한 부분을 추출하고 Inline 처리할 ..
2. OOP Part2 https://www.youtube.com/watch?v=D8_mbdoGPrg&list=PLagTY0ogyVkIl2kTr08w-4MLGYWJz7lNK&index=2 절차지향의 한계 요구사항 변경이 데이터 구조 변경 유발 Spring 테스트시에, 드러남. 데이터를 사용하는 모든 코드(Client,Test)의 수정 유발 이때, 객체 지향을 쓰면, 예를들어 Time인터페이스로 StopWatch 를 구현한다면 클라이언트 코드에서 , getNanoTime을 getMilliTime으로 변경해준다던지 하는 등의 매우 간단하게 수정이 가능해진다. 측, 추상화를 잘하면 코드를 변경해야하는 정도가 줄어들 수 있게 된다.
1. 소개 및 OOP https://www.youtube.com/watch?v=60lLSe1phks&list=PLagTY0ogyVkIl2kTr08w-4MLGYWJz7lNK&index=1 소개 내용 사람이 잘 이해할 수 있는 코드인지 잘 생각해보아라. 기계가 이해할 수 있는 코드는 아무나 짤 수 있다. 버그는 버그를 수정하다가 나온게 많다. 앞부분에 시간을 들이는 것은 뒷부분으로 갈수록 시간을 아껴준다. 내가 개발하려는 것을 간략적으로라도 그리고 시작하는 게 중요하다. 나중에 고칠게라는 것은 불가능한 말이다. 돌아가는 코드 NO! 읽을 수 있는 코드 YES! Why OOP? 데이터와 코드가 캡슐화된다. 데이터와 그 데이터를 조작하는 코드의 변경은 외부에 영향을 안 미친다. 외부에 노출된 인터페이스만 변경되지 않는다면, 프로시저..