전체 글375 마틴 파울러 리팩토링 Push down field 아래 코드를 class Employee { private String quota; } class Engineer extends Employee {...} class Salesman extends Employee {...} 아래 코드처럼 바꾼다 class Employee {...} class Engineer extends Employee {...} class Salesman extends Employee { protected String quota; } 만약 필드가 하나의 서브 클래스에서만 사용된다면 상위클래스에 두지 말고 하위 클래스로 옮긴다. 예제에서는 Employee 클래스에서 Salesman 클래스로 옮겼다. 2020. 1. 3. 마틴 파울러 리팩토링 Replace Query with Parameter 아래 코드를 targetTemperature(aPlan) function targetTemperature(aPlan) { currentTemperature = thermostat.currentTemperature; // rest of function... } 아래 코드로 바꿉니다. targetTemperature(aPlan, thermostat.currentTemperature) function targetTemperature(aPlan, currentTemperature) { // rest of function... } Replace Parameter with Query 를 반대로 합니다. 함수의 정의된 부분을 봤을 때 맨 위의 코드처럼 참조를 사용하는게 좋지 않을 때가 있습니다. 이건 보통 전역변수에.. 2020. 1. 2. 마틴 파울러 리팩토링 Replace temp with Query 아래 코드를 availableVacation(anEmployee, anEmployee.grade); function availableVacation(anEmployee, grade) { // calculate vacation } 아래 코드로 바꿉니다. availableVacation(anEmployee); function availableVacation(anEmployee) { const grade = anEmployee.grade; // calculate vacation... } 함수의 파라미터 목록은 요약 될 필요가 있습니다. 모든 코드가 그렇겠지만 내용이 중복되는 것을 피해야 합니다. 당연하겠지만 파라미터 목록이 짧으면 이해하기 더 쉽습니다. 파라미터를 없애기 가장 좋은 경우는 위의 예제처럼 같은 .. 2019. 12. 24. AKS 쿠버네티스를 도입하면서 정리한 글 - 배포하기 이 글을 통해서 얻으실 수 있는 것 1. 도커 이미지 빌드하기 2. 쿠버네티스에 앱을 배포하는 방법 쿠버네티스 소개 쿠버네티스는 컨테이너 관리 환경입니다. 도커같은 기술을 통해서 컨테이너를 만들었을때 컨테이너를 관리하기 위한 환경입니다. 비슷한 컨테이너 관리 환경으로는 Docker Swarm이 있습니다. Mesosphere 같은 서비스도 있지만 현재 컨테이너 관리환경은 쿠버네티스가 표준이 되고 있습니다. Azure, AWS, Google Cloud 에서도 EKS , AKS , GKE 를 서비스하면서 컨테이너 관리 환경으로 쿠버네티스를 서비스 하고 있습니다. 이런 컨테이너 관리 환경이 왜 필요할까요 더 쉬운 말로 표현한 쿠버네티스 도커같은 기술로 이미지를 만들고 배포한 컴퓨터가 여러대 있다고 했을 때 그 .. 2019. 12. 16. 알고리즘 문제 폐지 줍기 문제 N*N 격자로 된 땅이 있다. 1 0 1 7 2 0 2 0 0 2 2 1 1 3 3 2 오른쪽, 아래로 이동하고 오른쪽 아래 끝에서 다시 왼쪽 위로 이동한다. 이동하면서 땅에 있는 보석을 줍는다. 숫자는 땅에 있는 보석의 개수를 의미한다. 처음엔 먼저 N을 입력 받는다. 그리고 땅의 생김새를 입력받는다. 입력은 아래와 같다. 4 1 0 1 7 2 0 2 0 0 2 2 1 1 3 3 2 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public .. 2019. 12. 12. Typescript-rest 로 만든 프로젝트 tsoa로 개편 Typescript-rest 로 만든 api 를 tsoa로 개편했다. 바꾸게 된 이유는 아래와 같다. 1. 점점 잠잠해져가는 Typescript-rest 커뮤니티 2. tsoa는 swagger 3.0도 지원된다. 3. 점점 살아나는 tsoa 커뮤니티 Typescript-rest 저장소 링크 https://www.npmjs.com/package/typescript-rest typescript-rest A Library to create RESTFul APIs with Typescript www.npmjs.com tsoa 저장소 링크 https://www.npmjs.com/package/tsoa tsoa Build swagger-compliant REST APIs using TypeScript and Nod.. 2019. 12. 9. visual studio code 에서 django 자동완성이 안 될때 해결 visual studio code를 사용해서 django 프로젝트를 만들려고 할 때 파일의 자동완성이 잘 되지 않는 경우가 있다. 그렇다고 pycharm 을 쓰자니 유료이다. 자동완성이 되게 하는 핵심은 .vscode 폴더 안의 settings.json 파일이다. settings.json { "python.pythonPath": "venv\\Scripts\\python.exe", } 이렇게 작성을 하면 된다. 한번 장고 프로젝트를 새로 만들어서 안되는 자동완성을 되게 해본다. 먼저 프로젝트가 들어갈 폴더를 만든다. 자 이제 여기서 가상환경부터 만들기 시작한다. python -m venv venv 가상환경을 활성화시킨다. 자 이제 프로젝트 경로로 가서 장고를 받는다. pip install django 다운.. 2019. 12. 7. 마틴 파울러 리팩토링 - Replace conditional with polymorphism switch 문을 javascript의 클래스를 사용해서 리팩토링 한다. switch(bird.type) { case 'EuropeanSwallow': return "average"; case 'AfricanSwallow': return (bird.numberOfCoconuts > 2) ? "tired" : "average"; case 'NorwegianBlueParrot': return (bird.voltage > 100) ? "scorched" : "beautiful"; default: return "unknown"; } 이 코드를 아래 코드 처럼 바꾼다. class EuropeanSwallow { get plumage() { return "average"; } } class AfricanSwallo.. 2019. 12. 4. 마틴 파울러 - 리팩토링 Remove Dead Code if(false) { doSomethingThatUsedToMatter(); } motivation 코드를 작성하다보면 사용하지 않는 코드가 발생하기도 한다. 이건 아무런 경고나 에러메세지도 표시하지 않는다. 이렇게 쓰이지 않는 코드가 있으면 코드를 이해하는데 시간이 더 오래 걸리게 된다. 이런 코드는 지운다. 나중에 언제 쓰이겠지 라는 걱정은 안해도된다. 정말로 쓰인다면 git 으로 되돌린다. 정말로 언젠가 쓰일지도 모르겠다고 생각이 들면 주석을 남긴다. // ㅁㅁㅁ 하는 코드가 있었는데. 삭제됨 하지만 저자는 언제 마지막으로 이런 주석을 남겼는지 기억나지 않는다고 한다. git 과 같은 버전관리 툴이 있기 전에는 쓰지않는 Dead code에 주석 처리해두는 것이 일반적인 습관이었다. 지금은 할 필요가.. 2019. 11. 20. 이전 1 ··· 7 8 9 10 11 12 13 ··· 42 다음