ALL Post 202

클린코더스 6강 - Form

💡백명석 님의 클린 코더스 강의를 듣고 요약한 자료입니다. 목차 1, 2강 OOP 3, 4강 Function 5강 Function Structure 6강 Form Coding Standards 조직이 일정 수준의 크기가 되면 관료적인 문서화를 요구한다. 코드를 어떻게 작성할 것인지에 대한 표준을 마련하는 것은 필요하지만, 별도로 문서화하는 것은 회의적. Comments should be rare CodingStandards가 코멘트 작성을 강제하면 어떨까? 프로그래머는 필요해서가 아니라 의무적으로 코멘트를 작성하게 될 것이다. 무의미한 코멘트가 많이 생산될수록 코멘트를 읽는 사람이 줄어들 것이다. 따라서 코멘트는 특별하게, 그것이 반드시 필요한 경우에만 작성해야 한다. Comments are failur..

[오브젝트01] 객체, 설계

프로그래밍 패러다임 패러다임이란, 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제 의식 등의 체계를 말한다. 프로그래밍에 패러다임이 필요한 이유는, 개발자 공동체가 동일한 프로그래밍 스타일과 모델을 공유할 수 있게 하므로 불필요한 의견 충돌을 방지하기 때문이다. 티켓 판매 애플리케이션 추첨을 통해 관객들에게 무료 초대장을 발송했다. 당첨되지 않은 관객과 당첨된 관객을 구분해서 당첨되지 않은 관객은 티켓을 구매해야만 입장할 수 있는 프로그램을 만들 것이다. 첫 번째는 초대장을 구현하는 것이다. public class Invatation{ private LocalDateTime when; //초대 일자 } 그리고 티켓 클래스 public class Ticket { private Long fee; pub..

Study/오브젝트 2021.03.30

[스프링 인 액션] #2 WebConfig로 뷰 컨트롤러 설정하기

HomeController처럼 모델 데이터나 사용자 입력을 처리하지 않고 뷰만 전달하는 컨트롤러를 뷰 컨트롤러라고 한다. 이런 경우 별도로 컨트롤러를 만들지 않더라도 WebConfig설정만으로 처리할 수 있다. @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } 이 클래스를 아래와 같이 바꿀 수 있다. @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.add..

Study 2021.03.13

[스프링 인 액션] #2 웹 애플리케이션 개발하기

목표 MVC구조로 데이터베이스와 연결하지 않은 매우 간단한 웹 어플리케이션 개발해보기 요구사항 타코 재료를 선택해서 자신만의 타코를 만들 수 있다. 완성한 타코를 주문할 수 있다. 단계 도메인 설정 도메인이란, 애플리케이션 이해에 필요한 개념을 다루는 영역이다. 컨트롤러 작성 컨트롤러는 요청에 알맞은 작업을 처리하고 절절한 view를 반환한다. 뷰란 HTML을 말하고 타임리프 같은 템플릿을 이용하여 원하는 데이터를 넣어 줄 수 있다. 유효성 검사 클라이언트가 폼 데이터를 올바르게 작성했는지 유효성을 검사한다. 2번까지는 매우 쉬운 내용이어서 생략하고, 3번을 간단하게 정리한다. 스프링은 빈 유효성 검사(Bean Validation) API를 제공한다. 애플리케이션에 if/else를 덕지덕지 붙여 검사하지..

Study 2021.03.13

[스프링 인 액션] #1 스프링 애플리케이션 작성하기

스프링이란? 스프링은 애플리케이션 컨텍스트라는 컨테이너를 제공한다. 이것은 애플리케이션 컴포넌트(빈)를 생성하고 관리한다. 컴포넌트 또는 빈은 스프링 애플리케이션 컨텍스트 내부에서 서로 연결되어 완전한 애플리케이션을 만든다. 벽돌, 모르타르, 목재, 못, 배관, 배선이 어우러져 집을 구성하는 것과 비슷하다. 빈의 상호 연결은 의존성 주입(Dependency Injection, DI)이라고 알려진 패턴을 기반으로 수행된다. 애플리케이션 컴포넌트에서 의존(사용)하는 다른 빈의 생성과 관리를 자체적으로 하는 대신 별도의 컨테이너가 한다. 이 컨테이너는 모든 컴포넌트를 생성하고 관리하고 그 컴포넌트를 필요로 하는 컴포넌트에게 주입(연결)한다. 애플리케이션 부트스트랩 Springboot는 JAR파일에서 애플리케이..

Study 2021.03.12

프로세스 스케쥴링 #2 멀티 프로그래밍

프로세스 스케쥴링 멀티 프로그래밍 멀티 프로그래밍의 목적 최대한 CPU를 많이 활용하도록 하는 시스템 시간 대비 CPU활용도를 높이자 애플리케이션을 짧은 시간 안에 실행 완료한다 멀티 프로그래밍 애플리케이션이 온전히 CPU를 쓰기보다 다른 작업을 중간에 필요로 하는 경우가 있다. 단순한 예를 들자면, 애플리케이션이 실행되다가 파일(저장 매체)을 읽는다거나 프린팅을 해야 한다고 했을 때 그동안 아무 일도 할 수 없도록 설계되어 있다면? 만약 어떤 애플리케이션을 실행하는데 걸리는 시간이 10초라고 해보자. 이 애플리케이션은 A와 B라는 작업을 하는데, 각각 3초씩 걸린다. 그런데 A를 실행할 때 파일을 읽는 작업이 추가로 실행되는데 그 시간이 4초다. 이 애플리케이션이 CPU를 점유하는 시간은 총 10초지만..

Study/운영체제 2021.03.10

#1 생성자 대신 정적 팩터리 메서드를 고려하라

Item #1 생성자 대신 정적 팩터리 메서드(static factory method)를 고려하라. 1. 이름을 가질 수 있다 생성자만으로 객체의 특성을 설명할 수 없다. 이름을 지을 수 있다면 객체의 특성을 좀 더 구체적으로 묘사할 수 있다. BigInteger(int, int, Random) 보다 BigInteger.probablePrime 이 더 좋은 이름이다. 2.호출될 때마다 인스턴스를 생성하지 않아도 된다 불변 클래스는 인스턴스를 미리 만들어 두거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. 생성 비용이 큰 객체라면 성능을 끌어올릴 수 있다. 반복되는 요청에 같은 인스턴스를 반환하는 식으로 정적 팩터리 방식은 언제 어느 인스턴스를 살아있게 할 것인지..

클린코더스 5강 Function Structure #1

💡백명석 님의 클린 코더스 강의를 듣고 요약한 자료입니다. 목차 1, 2강 OOP 3, 4강 Function 5강 Function Structure 6강 Form Arguments 몇 개의 인자를 받을 것인가? 인자가 많아지면 함수의 복잡도가 증가한다. 인자의 개수는 많지 않은 것이 좋다. 3개를 넘지 않는 것을 권장한다. 특히 생성자에 인자가 많으면 실수할 확률이 매우 높아진다. 차라리 Java Bean의 setter를 방식으로 객체를 초기화하는 게 낫다. 하지만 setter로 객체를 초기화하는 동안 그 객체는 매우 불안정한 상태라는 단점이 있다. setter보다 Builder패턴이 더 나은 선택일 수 있다. Builder패턴에서 Builder를 생성할 때 필수 인자를 받고 나머지는 빌더로 채울 수 있..

초간단 Spring Scheduler 적용

Spring Scheduler는 Quartz라이브러리에 비해 사용하기가 매우 쉽습니다. 따로 의존성을 추가할 필요도 없습니다. 3분이면 적용해볼 수 있습니다. Springboot프로젝트 JDK1.8 이상 SchedulerTask @Slf4j @Component public class SchedulerTask { //1초마다 반복 @Scheduled(cron = "0/1 * * * * ?") //@Scheduled(fixedRate = 1000) public void schdulerTest() { log.info("NOW : {} ", LocalDateTime.now()); } } DemoApplication @EnableScheduling //Scheduling 활성화 @SpringBootApplicat..

Spring 2021.03.02

클린코더스 2강 - Function

💡백명석 님의 클린 코더스 강의를 듣고 요약한 자료입니다. 목차 1, 2강 OOP 3, 4강 Function 5강 Function Structure 6강 Form Function 함수는 한 가지 일만 해야 한다. 한 가지 일만 하는 함수를 만들기 위해서는 indentation, while, mested, if등이 없어야 한다. 잘 지어진 서술적인 긴 이름을 갖는 많은/작은 함수들로 유지해야 한다. The First Rule of Functions 함수는 더 이상 작을 수 없을 만큼 작아야 한다. 따라서 큰 함수를 보면 클래스로 추출할 생각을 해야 한다. 블록이 적어야 한다.--> 이 말은 블록 안의 또다른 블록은 계속 함수로 추출해야 한다는 뜻. if-else, while등 내부 블록은 한 줄이어야 한다..