본문 바로가기

ETC41

[CleanCode] 3장 함수 - 1 함수 - 1 작게 만들어라 함수를 만드는 첫째 규칙은 작게이다. 둘째 규칙은 더 작게이다. 블록과 들여쓰기 if문, else문, while문 등에 들어가는 블록은 한줄이어야 한다. 이 한줄에서 대개 함수를 호출한다. 블록 안에서 호출하는 함수 이름을 적절하게 짓는다면, 코드를 이해하기도 쉬워진다. 즉, 중첩 구조가 생길만큼 함수가 커져서는 안된다. 함수에서 들여쓰기 수준은 1단이나 2단을 넘어가면 안된다. 한 가지만 해라 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 하는 것이다. 함수를 만드는 이유: 큰 개념을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위해서 단.. 2022. 6. 26.
[CleanCode] 2장 의미있는 이름 의미있는 이름 의도를 분명히 밝혀라 // 좋지 않은 예 int d; // 좋은 예 int daysSinceCreation; 변수나 함수 그리고 클래스 이름은 해당 변수와 클래스의 존재 이유, 수행 기능, 사용 방법에 대한 질문에 모두 답하여야 한다. // 좋지 않은 예 public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) if(x[] == 4) list1.add(x) return list1; } // 좋은 예 public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (Cell cell : gameBoard) if(cell.isFlagged()) f.. 2022. 6. 25.
Cron 표현식 Cron 표현식 리눅스 서버나 스프링 배치 스케쥴링을 설정하면 생각보다 자주 Cron표현식을 접하게 된다. Cron? 먼저 Cron에 대해 알아야 한다. Cron: unix 운영체제에서 어떤 작업을 특정 시간에 실행시키기 위한 데몬 CronTab: cron 작업을 설정하는 파일 예를 들어 나는 SpringBatch를 학습하기 이전, 간단한 배치용 python코드를 일정 시간마다 실행하도록 CronTab에 cron표현식으로 설정하였다. Cron 표현식 필드 Cron 표현식은 초, 분, 시, 일, 월, 요일, 연도 총 7개의 필드로 이루어져 있다. 초: Seconds, 0~59 분: Minutes, 0~59 시: Hours, 0~23 일: Day, 1~31 월: Month, 1~12 (각 1월부터 12월까지.. 2022. 6. 24.
zsh no matches found 에러 해결하기 zsh no matches found 에러 해결하기 spring batch 공부를 하면서 job parameter을 java -jar 방식에서 넘기려 시도하였다. java -jar spring-batch-0.0.1-SNAPSHOT.jar name=user1 seq(long)=2L date(date)=2022/01/01 age(double)=16.5 zsh: no matches found: seq(long)=2L 위와 같이 zsh상에 파라미터를 받지 못하는 현상이 나타낫다. 이는 zsh에서만 그런지 몰라도 인식에 문제가 있는 것 같다. java -jar spring-batch-0.0.1-SNAPSHOT.jar 'name=user1 seq(long)=2L date(date)=2022/01/01 age(dou.. 2022. 5. 18.
[Object] 객체지향 프로그래밍 2 객체지향 프로그래밍 2 컴파일 시간 의존성과 실행 시간 의존성 코드의 의존성과 실행 시점의 의존성 코드의 의존성과 실행 시점의 의존성은 서로 다를 수 있다. -> 클래스 사이의 의존성과 객체 사이의 의존성은 동일하지 않을 수 있다. 유연하고, 쉽게 재사용할 수 있으며, 확장 가능한 객체지향 설계가 가지는 특징은 코드의 의존성과 실행 시점의 의존성이 다르다는 것이다. 코드의 의존성과 실행 시점의 의존성이 다르면? 코드를 이해하기 위해서는 코드뿐만 아니라 객체를 생성하고 연결하는 부분을 찾아야 하기 때문에 코드를 이해하기 어려워진다. 하지만 코드는 더 유연해지고 확장 가능해진다. 무조건 유연한 설계도, 무조건 읽기 쉬운 코드도 정답이 아니다. 차이에 의한 프로그래밍 차이에 의한 프로그래밍: 상속을 이용해 부.. 2022. 5. 16.
[Object] 객체지향 프로그래밍 1 객체지향 프로그래밍 1 클래스가 아닌 객체에 초점을 맞춰야 한다. 어떤 클래스가 필요한지 고민하기 전에 어떤 객체들이 필요한지 고민해야 한다. 클래스는 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것 클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 행동을 가지는지 먼저 결정해야 한다. 객체를 중심에 두는 접근 방법은 설계를 단순하고 깔끔하게 만든다. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다. 객체는 홀로 존재하는 것이 아니라, 다른 객체에게 도움을 주거나 의존하면서 살아가는 협력적인 존재다. 객체를 협력하는 공동체의 일원으로 바라보는 것은 설계를 유연하고 확장 가능하게 만든다. 프로그램의 구조는 도메인의 구조를 따른다. 도메인: 문제를 해결하.. 2022. 5. 16.
[Object] 객체지향 설계 객체지향 설계 좋은 설계란? 우리가 짜는 프로그램은 두가지 요구사항을 만족시켜야 한다. 오늘 완성해야 하는 기능을 구현하는 코드 내일 쉽게 변경할 수 있는 코드 좋은 설계란? 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계 객체지향 설계 결국 좋은 코드, 즉 우리가 원하는 것은 변경에 유연하게 대응할 수 있는 코드이다. 객체지향 프로그래밍은 의존성을 효율적으로 통제할 수 있는 다양한 방법을 제공함으로써 요구사항 변경에 좀 더 수월하게 대응할 수 있는 가능성을 높여준다. 변경 가능한 코드는 이해하기 쉬운 코드이다. 아무리 코드가 변경에 유연하다고 하더라도 이해하지 못하는 코드는 변경이 어렵다. 객체지향 패러다임은 세상을 바라보는 방식대로 코드를 작성할 수 있도록 돕는다... 2022. 5. 10.
[Object] 객체와 설계 객체와 설계 객체지향적 사고와 프로그래밍을 위해 Object라는 책을 읽고 정리하는 과정입니다. 코드의 경우 Github 커밋에 대한 링크를 이용합니다. before code: Github commit after code: Github commit 영화관의 티켓 판매를 예시로 하는 코드이다. 예상을 빗나가는 코드 이해 가능한 코드: 동작이 예상에서 크게 벗어나지 않는 코드. 예상을 빗나가는 코드란 이해 가능한 코드가 아니라는 것이다. before code Theater의 enter 메서드 각각의 객체 내에서 해야할 것 같은 행위들이 모두 enter 메서드 내에서 진행된다. 변경에 취약한 코드 의존성: 변경에 대한 영향을 암시한다. 어떤 객체가 변경될 때 그 개체에게 의존하는 다른 객체도 함께 변경될 수 .. 2022. 5. 9.
[Ubuntu] Ubuntu server 업데이트 후 netplan failed with exit status 1 netplan failed with exit status 1 에러 수정하기 이전에 Ubuntu server 21.10 arm 버전에서 Ubuntu server 22.04 arm 버전으로 업데이트하였다. 사용하던 Ubuntu 업데이트하기 문제발생 업데이트를 정상적으로 진행하고, reboot을 하면서 문제가 발생했다. 서버가 켜지는 과정에서 netplan failed with exit status 1 오류가 나고, apt 명령어 실행시 모든 요청에 에러가 발생했다. 라즈베리파이4에서 우분투를 부팅할떄마다 SSD 충돌이 나진 않을까 걱정도 되고… 3~4번씩 부팅을 시도하는 경험을 많이 하다보니 ERR표시만 보아도 심장이 아주.. 문제 해결 netplan 문제점 확인 # netplan을 확인해본다. sudo n.. 2022. 4. 30.