본문 바로가기
후기

[책 후기] 스프링 입문을 위한 자바 객체지향의 원리

by 신재권 2023. 1. 2.

https://product.kyobobook.co.kr/detail/S000001628116

 

스프링 입문을 위한 자바 객체 지향의 원리와 이해 | 김종민 - 교보문고

스프링 입문을 위한 자바 객체 지향의 원리와 이해 | 이 책은 자바에서 스프링으로 나아가기 위한 연결 고리를 제공한다.

product.kyobobook.co.kr

책에 나와있는 대상 독자

이책은 자바언어나 자바프로그래밍을다루는책이아니며, 스프링을전문적으로다루는 책도 아니다.

이 책은 객체지향의 개념을 이해하고자하거나 스프링에 입문하기 위한 기초 지식을 습득하고자하는 개발자들을 위한책이다.

따라서 다음의 조건에 부합 하는 독자 에게 추천 한다.

• 자바의 제어문까지는 알고있는개발자
• 객체지향의 특성과 설계원리를 이해하고자 하는 개발자
• 스프링 프레임워크에 입문하는데 기초지식이 부족하다고 느끼는 개발자 

• 스프링 프레임워크 전문서적을 이해하는데 어려움을 느끼는 개발자

 

읽으면 좋은 대상들 

1. 자바의 기초 문법은 대략적으로 알겠지만, 객체 지향이 뭔지 잘 모르겠는 사람 

2.  자바 소스코드를 실행할 때 변수, 클래스 등이 메모리 어디에 적재되는지, main 메서드를 실행하면 어떤 순으로 메모리에 적재되는지 설명할 수 없는 사람

3. 왜 static 영역이 아닌 곳에서는 static 영역을 참조할 수 있고, static 영역인 곳에서는 static 이 아닌 영역을 참조할 수 없는지 설명할 수 없는 사람

4. 아래의 코드 결과가 뭔지 모르겠는 사람

5. SOLID 원칙을 외우기만 하고 뭔지는 모르는 사람

6. 디자인패턴을 왜 사용하고, 어떻게 쓰는지 모르는 사람

 

public class 동물 {
	
    void sing() {
    	System.out.println("동물이 운다");
    }
}

public class 고양이 extend 동물 {
	
    @Override 
    void sing() {
    	System.out.println("야옹 야옹");
    }
}

public class Main {
	
    public static void main(String[] args) {
    	동물 동물1 = new 고양이();
        동물 동물2 = new 동물();
        
        동물1.sing();
        동물2.sing();
 	}
 }

 

요약 

1장 : 객체지향 패러다임이 등장할 때 까지의 역사이다. 간단하게 읽어보면 좋다.

2장 : JDK, JRE, JVM 이 정확히 무엇인지 알게되며, 코드를 실행하며 메모리의 어느 부분에 변수 등이 적재되는지 그림과 소스코드 예시로 쉽게 이해할 수 있다.  또한 이 이해를 바탕으로 왜 static 변수를 참조할 수 있는지에 대해 알 수 있을 것이다.

3장 : 객체지향의 4대 특성(캡슐화, 상속, 추상화, 다형성)을 예제코드로 설명해주며, 대부분의 자바 기본서에서 다루는 객체지향의 4대 특성을 정확하게 이해하도록 알려준다.  또한 객체지향의 4대 특성을 이용할 경우 메모리에 어떻게 적재되는지 알 수 있다.

4장 : 자바에서 사용하는 키워드를 언제 사용해야 하는지, 왜 사용해야 하는지 알려준다.

5장 : SOLID 원칙이 뭔지, 예제 코드를 SOLID 원칙을 적용한 코드로 리팩토링 하는 방식으로 알려준다.

6장 : 대표적인 디자인 패턴인 어댑터 패턴, 프록시 패턴, 데코레이터 패턴, 싱글톤 패턴,  템플릿 메서드 패턴, 팩터리 메서드 패턴, 전략 패턴을 예제코드를 들어주며 설명하고 어떤 SOLID 원칙이 적용되었는지, 언제 사용하는지, 어떻게 사용하는지 간단하게 설명해준다. 

7장 :  스프링의 대표 개념인 IoC/DI, AOP, PSA 에서 대해 배운다.

IoC/DI 에서는 의존성 개념을 설명해주고 스프링 없이 의존성 주입 방법과 스프링을 통한 의존성 주입 방법에 대해 배운다.

AOP 에서는 간단하게 왜 사용하는지 알려주고, 기본 개념을 알려준다. 그리고 AOP 의 다양한 용어들을 쉽고 간단하게 설명해준다.

부록 :  MVC 게시판 구축 / 람다 인터페이스 

부록 A : Spring + H2 를 활용해 간단한 게시판을 제작한다. 모든 코드가 나와있으며 STS 툴로 진행한다. 이미 많은 곳에서 Spring boot 로 작업을 하지만, Spring 설정을 노가다 해보는 것도 나쁘지 않다. 나도도 Spring을 Spring boot 로 시작했기 때문에 매우 불편했다. 하지만 좋은 경험이다.

물론 깊은 개념은 나오지 않으며 Controller - VO - DAO 로 작업을 진행한다. 

실제 Spring boot 에서는 이보다 매우 편리하게 작업이 가능하다. 

 

부록 B : 자바 8 이전 과 이후의 스펙 변화를 말해준다. 가장 큰 스펙 변화는 함수형 인터페이스 도입, 람다 도입인데, 이것이 어떤 계기로 왜 도입됬는지 간단히 설명해준다.

또한, 간단하게 람다 사용법과 함수형 인터페이스 사용법을 알려준다. 또한 메서드 레퍼런스도 간단하게 알려준다.

그리고 가장 중요한 인터페이스의 스펙 변화와 계기를 알려준다.

 

책 자체 후기

자바 기본 문법을 본 후 스프링을 공부하기전에 보면 아주 좋은 책이라고 생각한다.

대부분의 기초 자바 서적은 객체지향까지는 설명해주지만, 그것만으로 객체지향을 이해하기는 어렵다고 생각된다. 

이 책은 아주쉽게 설명해준다고 생각한다.

또한 , 메모리 그림을 그려가며 글로만 메모리 어디 부분에 저장된다 라고 읽는 것보다 , 이 책을 통해 메모리에 대해 시각적으로 보며 더욱 쉬운 이해가 가능하다.

 

모든 디자인 패턴이 나와있는 책은 아니지만, 스프링에 사용되는 대표 디자인패턴에 대한 설명과 간단한 코드가 있어 스프링을 배우기전에 이것에 대해 이해하면 스프링을 더욱 친숙하게 배울 수 있다 생각한다.

 

나는 Java 문법 을 때고 맨땅에 헤딩으로 Spring 클론 코딩으로 시작하였는데, 사실 어느 방식이든 나쁘지는 않다. 

그 당시에는 정말 Spring 이 생소하고, 자바 문법만 아는 상태에서 시작했기 때문에 정말 적응이 힘들었다.

하지만 이제와서 이 책을 읽어보니 아무런 개념이 없는 상태에서 클론 코딩을 하며 개념을 이해하는 것과, 개념을 완벽하게 이해하고 클론 코딩하는 것 중 후자가 더욱 효율이 좋다고 생각한다.

 

다른 개발자들도, Spring 을 시작하려는 개발자들도 이 책을 꼭 읽어보면 좋겠다.

 

이 책을 다 읽고 나선 인프런 - 김영한 Spring 로드맵을 따라는것도 좋다고 생각한다.

이 책 하나로는 Spring 을 정복하지 못한다. 말그대로 입문 책이다.

김영한님의 강의 패턴은 한 기술을 설명할때 과거의 기술부터 현재까지 v1~vn 방식으로 나눠 어떻게 발전되었는지 잘 설명해준다.

 

아래는 인프런 - 김영한 님 무료 강의 이다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

책을 사기 힘든 상황이라면 저자의 블로그도 있으니, 꼭 보면 좋겠다.

https://expert0226.tistory.com/category/%EA%B0%95%EC%A2%8C/Spring%203.0?page=3

 

'강좌/Spring 3.0' 카테고리의 글 목록 (3 Page)

 

expert0226.tistory.com

 

나의 후기 및 계획

책의 마지막 부분에서 저자의 개발자 인생을 변화시켜준 3개의 책을 꼽는데, 나의 기준에서도 내 인생을 변화시켜준 3개의 책중 첫번째 책이 될꺼같다. 

개념을 외우는 식으로만 알고 있었던 자바 및 객체지향, 디자인 패턴 등을 쉽게 이해할 수 있었다.

현재 나는  사이드 프로젝트를 진행하며, Spring 개념에 대해 공부하고 있다. 

사실 토비의 스프링을 보다가 중간에 이책으로 넘어온 케이스이다.

토비의 스프링을 보면서 AOP 를 설명하기전 쉽게 이해시켜주기위해 디자인 패턴을 설명해주는데, 나한테는 이해가 되지 않았다. 

내가 디자인패턴을 개념만 알고있지, 구현을 해본적이 없어서 조금 낯설었다. 그래서 그런거같다.

그래서 이 책을 구매해서 읽게되었는데, 토비의 스프링을 다시 도전할 수 있을꺼같다.

 

현재 읽고있는 책은 '이펙티브 자바' 이다.  자기전에 간단하게 한 챕터씩 읽고 있다.

다음 읽을 책은 최범균 저자의 '도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지' 와 '테스트 주도 개발 시작하기' 이다.

위의 3개 책을 모두 읽고 나선 '객체지향의 사실과 오해', '오브젝트' 를 읽을 계획이다.

5개 책을 다 읽게 되면 과거에 읽다가 점점 이해하기 어려워져서 그만둔 '토비의 스프링', 'Test Driven', 'Clean Code' 를 읽을 것이다