분류 전체보기

    서평 - 스프링 입문을 위한 자바 객체 지향의 원리와 이해

    구성 이 책은 크게 7개의 챕터로 구성되어 있다. 1장은 기계어부터 객체 지향 프로그래밍 패러다임이 탄생한 배경까지 빠르게 프로그래밍 언어의 발전 과정을 살펴본다. 2장에선 Java에 남아있는 이전 프로그래밍 패러다임의 잔재와 JVM 메모리 구조를를 알아본다. 3장에선 객체지향의 4대 특징을 다양한 메타포를 사용해 설명한다. 4장에선 Java에서 객체지향의 특성을 확장하기 위해 사용한 방법들에 대해 알아본다. 5장에선 객체지향 설계 원칙 SOLID에 대해 알아본다. 6장에선 Spring에서 사용되는 다양한 디자인 패턴을 SOLID원칙과 비교하면 설명한다. 마지막 7장에 Spring의 3가지 핵심원리인 IoC/DI, AOP, PSA를 예제를 통해 설명한다. 부록에선 스프링MVC를 활용해 게시판을 만들며 앞..

    Java - 함수(function)와 메서드(method), 일급 객체

    함수 vs 메서드 자바에서 함수(function)는 일반적으로 정적 메서드(static method)와 같은 의미로 사용된다. 또 일반적으로 함수는 특정 클래스에 속하지 않고 전역적으로 호출될 수 있다. 하지만 메서드는 보통 특정 클래스에 선언되기에 종속적이다. 즉, 함수는 전역적으로 사용될 수 있는 독립적인 존재, 메서드는 클래스와 같은 구조체에 종속적인 존재다.아래의 코드를 통해 확인해보자.public class FirstClass { public static void callFunction() { System.out.println("함수"); }}public class SecondClass { public void callMethod() { System.out.println("메..

    Java - List의 제네릭 타입이 달라도 오버로딩은 불가하다.

    문제 상황 토이 프로젝트 진행 중 인자로 List의 제네릭 타입을 다르게 해서 메서드를 오버로딩하려고 했다. 아래와 같이 코드를 작성하면 이와 같은 컴파일 오류가 발생한다. 'calculatePeriodBy(List)' clashes with 'calculatePeriodBy(List)'; both methods have same erasure public int calculatePeriodBy(List functions) { int totalExpectedTime = functions.stream() .mapToInt(RequiredFunction::getExpectedTime) .sum(); return calculatePeriod(totalExpectedTime); } public int calcu..

    JPA - 상속 관계 Single Table 전략에서 DiscriminatorColumn 접근하기

    문제 상황 토이 프로젝트 진행 중 상속 관계 매핑을 싱글 테이블 전략으로 진행했다. 아래는 상속 관계에 있는 클래스의 다이어그램이다. 공통 사항은 Study 필드에 있고 자식 클래스들의 세부사항은 각각의 필드에 있다. 이 때 StudyRepository 하나로 기본적인 CRUD작업을 할 경우 해당 행의 타입이 어떤 타입인지 구분하기가 어려웠다. 예를 들어, id값으로 데이터를 조회할 때 해당 row의 타입이 무엇인지 알 수 없기 때문에 데이터를 매핑할 Entity의 타입을 지정할 수 없었다. 물론 요청이 들어올 때 타입을 구분하는 변수를 하나 추가하고 자식 클래스별로 repository를 만들면 해결 할 수도 있다. 하지만 상속 관계 매핑 시 @DiscriminatorColumn을 통해 DB에 생성되는 ..

    Java - List vs Map

    List vs Map 인프런 강의를 듣던 중 "List로 조회를 하면 성능이 저하될 수 있으니 Map으로 바꾸자"라는 말을 들었다. 사실 별다른 생각 없이 두 컬렉션을 사용해왔다. 키를 통해 값을 조회해야하는 상황에선 Map을 쓰고, 그 외의 상황에선 일반적으로 List를 사용해 왔다. 특정 상황에서 분명 유리한 컬렉션이 있다. 그렇기에 두 컬렉션의 구조적 차이와 성능 차이에 대해 알아보고자 한다. List vs Map(조회 시 성능 차이) 두 컬렉션에서 주로 사용되는 구현체인 ArrayList와 HashMap을 사용해 비교를 해보자 1. 저장 성능 차이 1-1. List - 순차 저장 // ArrayList - 순차 저장 saveListSequentially(1000); saveListSequentia..

    서평 - 소프트웨어 장인

    직업을 대하는 태도 개발자는 내가 가져왔던 여러 직업들 중 하나다. 그리고 평생 업으로 삼을 듯하다. 그렇기에 직업을 대하는 나의 태도 또한 달라져야만 했다. 이전에 다른 일들을 하며 수동적인 태도를 가지는 문제가 있었다. 삶에 대한 나의 태도 또한 비슷하게 변해갔다. 이 태도는 나의 자존감을 서서히 갉아 먹었고, 삶의 의미를 잃게 만들었다. 나의 문제가 일반적인 성향이라고 볼 수도 있다. 하지만 타인에게도 비슷한 문제가 있다고 나 또한 그래도 괜찮다는 것은 내 가치관과 맞지 않다. 문제를 해결하기 위해(정확히는 현실 도피) 퇴사를 했다. 휴식기를 보내던 중 개발자라는 직업을 알게 됐다. 그동안에 고민했던 내 가치관과 적합하기에 선택했다. 또 개발자라는 직업을 통해 역으로 얻고 싶은 삶의 태도가 있었다...