전체 글

전체 글

    Servlet이란?

    스프링을 이용해 미션 진행 중 client에서 오는 요청을 처리하기 위한 url을 매핑할 때 Spring의 @RequestMapping이라는 어노테이션을 사용했다. 매핑 과정이 궁금해 공부하던 중 DispatcherServlet이라는 것이 관여하고 있다는 것을 알게 되었고 그것의 전신인 Servlet이라는 것에 대해 공부해보았다. Servlet 이란? 서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 동적인 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 웹에선 Http message를 통해 요청과 응답을 주고 받게 되는데, 이 과정에서 소켓 열고 닫기, Http 요청 메세지 파싱하기, 비지니스 로직 수행, Http 응답 메세지 생성 등 수많은 과정이 필요하다...

    [아이템 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

    많은 클래스가 하나 이상의 자원에 의존한다. 여기서 의존관계란 무엇일까? 'A가 B를 의존한다'의 의미는 의존대상 B가 변하면, 그것이 A에 영향을 미친다는 것이다. 예를 들어, 맞춤법 검사기는 사전에 의존하는데 이를 정적 클래스로 구현하면 아래와 같이 구현할 수 있다. public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } 비슷하게, 싱글톤으로 구현하는 경우도 있다. public class SpellC..

    함수형 인터페이스의 위력(?)

    로또 미션 도중 순위를 Enum class로 표현하는 중 문제가 발생했다. public enum Rank { NOTHING(0, 0, false), FIFTH(5_000, 3, false), FOURTH(50_000, 4, false), THIRD(150_000, 5, false), SECOND(30_000_000, 5, true), FIRST(2_000_000_000, 6, false); private final int money; private final int matchCounts; private final boolean isBonus; Rank(int money, int matchCounts, boolean isBonus) { this.money = money; this.matchCounts = ..

    래퍼 클래스와 오토 박싱 & 언박싱

    자동차 경주 미션을 진행하는 도중 최대로 멀리간 position의 값을 구하기 위해 아래와 같은 method를 사용하였다. private int getFarthestPosition() { return cars.stream() .map(Car::getPosition) .max(Integer::compare) .orElse(-1); } 리뷰어께서 이에 대해 불필요한 unboxing과 boxing 과정이 있다고 피드백을 주셨다. unboxing과 boxing을 대충 무엇인지는 알고있었지만 이번 기회에 제대로 알아보기로 했다! 래퍼 클래스(Wrapper class) 자바의 자료형은 기본 타입(Primitive type)과 참조형 타입(Reference Type) 으로 나뉜다. 기본 타입 : int, long, ..

    [아이템 2] 생성자에 매개변수가 많다면 빌더를 고려하라

    정적 팩토리와 생성자에는 똑같은 제약이 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 1. 점층적 생성자 패턴 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식이다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public Nutrition..

    [아이템 1] 생성자 대신 정적 팩토리 메소드를 고려하라.

    객체 생성시 보통 public 생성자를 이용한다. 하지만, 생성자를 사용하는 방법 이외에 정적 팩토리 메소드를 사용해서 만들 수 있다. 정적 팩토리 메소드를 이용하여 생성하면 아래와 같은 장점이 있다. 첫 번째, 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면 정적 팩토리 메소드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. 또한, 생성자를 이용하면 같은 매개변수 타입을 가진 생성자는 하나만 만들 수 있다. 하지만 정적 팩터리 메서드를 이용하여 구현하게 되면, 이름을 통해 각 함수의 역할을 나타낼 수 있으므로 이러한 문제점을 해결할 수 있다. 두 번째, 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 인스턴..

    운영체제란?

    운영체제란? 컴퓨터에서 항상 돌아가는 프로그램(커널) 응용프로그램과 하드웨어 사이에 인터페이스 역할 컴퓨터 자원들을 관리(processes, resources, user interfaces and so on) 운영체제의 역할 CPU 스케줄링 메모리 관리 입출력 관리 파일 관리 프로세스 관리 네트워크, 보안 사용자 관리 디바이스 드라이버

    스프링 핵심 원리 - 기본

    스프링 스프링은 자바 언어 기반의 프레임워크 객체 지향 언어 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 객체 지향 특징 추상화 캡슐화 상속 다형성 역할과 구현을 분리 역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경이 편리해진다. 클라이언트는 대상의 역할(인터페이스)만 알면 된다. 스프링과 객체 지향 다형성이 가장 중요! 스프링은 다형성을 극대화 시켜줌 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해 역할과 구현을 편리하게 다룰 수 있도록 지원한다. 스프링을 사용하면 구현을 편리하게 변경할 수 있다. 좋은 객체 지향 설계의 5가지 원칙(SOLID) SRP : 단일 책임 원칙(single respons..