채널톡 아이콘

[Java 실무 프로젝트 입문편] 객체지향 사고력 훈련 - 미니 프로젝트 3종 실습

작은 프로젝트부터 구조 잡는 연습까지! Java 객체지향 설계와 실습 경험이 부족한 분들을 위한 직접 만들어보며 성장하는 미니 프로젝트 실전 입문 강의. 기본기에서 구조적 사고까지, Java 애플리케이션을 처음부터 끝까지 구현해보며 실력을 키워보세요.

Thumbnail

초급자를 위해 준비한
[백엔드, 개발 · 프로그래밍] 강의입니다.

이런 걸 배울 수 있어요

  • Java 프로그래밍에 대한 자신감

  • 지루했던 Java에 대한 즐거움

  • 제대로 된 Java 백엔드 개발자로 입문하기 위한 시작 위치

  • Java의 Stream API의 활용법

  • 애플리케이션을 어디서부터 어떻게 구현해야 하는지에 대한 방법

  • 단위 테스트 코드의 필요성

  • 단위 테스트 코드를 어디서부터 어떻게 작성해야 하는지에 대한 방법

  • 요구사항 문서를 작성하고, 요구 사항을 분석하는 연습

  • 유효성 검증의 중요성과 유효성 검증을 실시하는 방법

  • 도메인 규칙의 중요성과 도메인 규칙을 코드로 표현하는 연습

  • 도메인 규칙을 단위 테스트 코드로 작성하는 연습

  • Java의 Exception을 활용한 유효성 검증 방법

  • Custom Exception을 활용하는 연습

  • Layered Architecture의 개념과 적용 방법

  • Generic 활용 방법

  • DIP의 개념과 DIP가 필요한 이유, 적용 사례

  • Google Tasks API의 활용 방법

이런 분들께 추천해요

Java 문법은 배웠지만, 실제로 어디서부터 어떻게 구현해야 할지 모르는 분

Java 프로젝트 실습 경험이 부족한 분

Spring을 배우긴 했지만, Java 기본기가 약해 프로젝트에서 좌절했던 분

📌 수강 전 vs 수강 후, 이렇게 달라집니다!

🔸 "요구사항을 코드로 옮기기 어려웠어요"

→ 기능을 나누고 클래스를 직접 설계할 수 있게 됩니다

🔸 "객체지향 설계가 막막해요"

→ OOP 사고로 구조화된 코드 작성이 가능해집니다

🔸 "프로젝트 실습 경험이 부족했어요"

→ 3가지 미니 프로젝트 완성으로 실전 감각이 향상됩니다

🔸 "그냥 눈으로만 배우고 있었어요"

→ 분석 → 설계 → 구현 → 테스트 전 과정을 직접 수행하게 됩니다

💡 애플리케이션 구현이 안되는 분들을 위한 아주 특별한 강의



부트 캠프에서 1000명 가까운 학생들을 가르치며 학생들에게 듣게 된 흔한 이야기

"개념은 이해가 되는데 구현을 못하겠어요"

"Java의 문법은 이제 좀 알겠는데, Java로 뭘 만들어 보라고 하면 어디서부터 시작해야 할지 모르겠어요"

"Java를 마치고 Spring으로 넘어왔는데 실습에 손을 못 대겠어요"

"학습 자료에 있는 코드를 처음부터 끝까지 타이핑해 봤는데 프로젝트가 너무 두려워요"


그 때, 제가 학생들에게 해 주었던 이야기는 다음과 같습니다.

"눈으로만 학습하려 하지 말고, 손가락과 머리로 학습하세요"

"코드를 타이핑할 때, 스스로 생각하며 타이핑하세요"

"기본을 먼저 다지세요. 그다음엔 응용을 위해 연습에 연습을 거듭하세요"


이처럼 스스로 생각하면서 언어와 기술의 기본을 다지고, 응용을 위한 연습에 연습을 거듭하면 "이번엔 뭘 만들어 볼까?"라는 두근거림에 둘러싸여 있는 자신을 발견하게 됩니다.


이런 두근거림을 느끼기 위한 가장 좋은 방법은 뭘까요?

아주 작은 사이즈의 애플리케이션이더라도 스스로 생각하고, 고민하면서 처음부터 끝까지 직접 만들어 보는 것입니다.


무엇을 만들어야 할지 모르겠는 분, 어떻게 만들어야 할지 모르겠는 분들은 이 강의를 들으세요.

여러분들의 애플리케이션 구현 능력뿐만 아니라 프로젝트에 대한 두려움이 아닌 설레는 두근거림을 느낄 수 있게 해 드리겠습니다.

미니 프로젝트 Java 1부에서는 Java와 약간의 외부 라이브러리, Google Tasks API를 이용해 콘솔에서 동작하는 애플리케이션을 만들어 봅니다.


"콘솔 기반 애플리케이션은 쓸데도 없는데 뭣하러 만들지?"라고 생각할 수도 있습니다. ^^;

물론 저도 이 말에 100퍼센트는 아니지만 충분히 공감을 합니다.

하지만 콘솔 기반 애플리케이션이 좀 불편해서 그렇지 Java의 기본기를 다지는 데 있어 굉장히 중요한 역할을 한다고 생각합니다.


"설마 콘솔 기반 애플리케이션만 만들어보고 끝나는 건 아니겠지?"라고 생각되신다면?

아닙니다. 미니 프로젝트 Java 2부에서는 UI(Java FX)도 구현해 봅니다. ^^;


"Java FX는 실무에서 잘 안 쓰는 기술인거 아냐? 근데 왜 배워??"라고 생각하신다면?

좋은 Java 개발자로 오랫동안 실무에서 잘 살아남으려면 UI를 구현해 보면서 클라이언트, 서버 백엔드 가릴 것 없이 양쪽의 입장을 다 이해해 보는 게 중요합니다.

클라이언트 측의 입장을 이해할 수 있다면 더 나은 서버 측 애플리케이션을 만들 수 있지 않을까요? ^^;

일단 해보면 재미있을 거예요. ^^

강의 진행 방식

  • 총 3가지 미니 프로젝트를 수행합니다:

    1. Stream API 구구단 애플리케이션

    2. Todo 리스트 관리 앱 (1): 요구사항 기반 설계, 구현 및 테스트

    3. Todo 리스트 관리 앱 (2): Google Tasks API 연동

  • 각 프로젝트는 요구사항 문서를 기반으로
    수강생이 스스로 설계 → 구현 → 테스트까지 먼저 시도하고,
    Kevin의 구현 버전과 비교하며 더 나은 구조와 사고를 배우는 방식입니다.

📶 구현 역량 파워 업 단계 가이드

100% 파워 업

  • 스스로 전 기능을 구현해 본 뒤 강의와 비교합니다.

    • "도저히 모르겠는데 어떻게 안 볼 수 있지?"라는 생각이 당연히 들 텐데 인터넷을 찾아서 뒤지든 Chat GPT한테 물어보든 어쨌든 스스로 모든 기능을 구현해 봅니다.

  • 가장 큰 성장과 뿌듯함을 느낄 수 있습니다.


80% 파워 업

  • 할 수 있는 만큼 최대한 스스로 구현해보고,

    막히는 부분은 강의 내용을 참고해 적용해 봅니다.

50% 파워 업

  • 강의를 먼저 보고 코드를 따라치며 학습합니다.


  • 그 다음 빈 프로젝트에 다시 스스로 코딩해 봅니다.

0% 파워 업

  • 그냥 눈으로 강의를 보기만 합니다.

  • 이렇게 하시면 안 된다는 말씀입니다. ^^;

    • 프로젝트라는 건 아주 작은 프로젝트라도 반드시 스스로 생각하면서 코드를 타이핑하는 과정이 반복되고 누적되어야 합니다.

    • 그래야 그 과정에서 내 것으로 만드는 지식들이 조금씩 쌓여갈 수 있습니다.

이 강의에서 얻는 것

  • Java 객체지향 코드에 대한 감각

  • 설계 → 구현 → 테스트 흐름 전체 경험

  • 작고 다양한 프로젝트 실습을 통한 코드 자신감 향상

  • Spring을 배우기 전, Java를 단단히 다질 수 있는 기반


  • Java가 재미있어짐

이 강의 이후에 아래와 같은 후속 시리즈를 통해 다양한 케이스의 애플리케이션을 구현하는 연습을 하실 수 있을 것입니다.

  • Java 1부(오픈)

  • Java 2부(곧 오픈 예정)

  • Java 3부(곧 오픈 예정)

  • Spring MVC 편(예정)

  • 테스팅 편(예정)

  • Spring Rest Docs 편(예정)

  • Spring Security 편(예정)

  • Spring WebFlux 편(예정)


- 클린코드 - 저자의 말을 잠깐 인용하겠습니다. ^^

자전거 타는 법에 익숙해지면 자전거가 몸의 일부처럼 움직이듯, 이 강의를 통해 애플리케이션 구현이 여러분들의 편안한 일상으로 다가올 수 있길 바래봅니다.

이런 내용을 배워요

💡Introduction 섹션을 제외한 섹션 순서이므로 착오 없으시기 바랍니다.

섹션 1: Stream API를 이용한 구구단 애플리케이션 제작

섹션 1에서는 여러분들의 머리와 손가락에 시동을 걸 수 있는 아주 간단한 애플리케이션을 만들어 봅니다.

"뭐야? 구구단 프로그램이면 너무 간단한 거 아냐?"라고 생각할 수 있습니다. 구구단 프로그램은 알고리즘 문제를 풀 때도 단골로 나오는 기초적인 문제 중 하나이니까요.


하지만 잘 돌아가는 하나의 애플리케이션을 만든다는 관점에서 고민을 해보아야 하고, Java의 Stream API를 이용해서 구현해야 하기 때문에 구구단 프로그램이 색다르게 다가올 수 있습니다. ^^


프로젝트 목표

  1. Java의 람다 표현식과 함수형 인터페이스의 개념을 이해할 수 있다.

  2. Stream API의 특성과 기본 사용 방법을 이해할 수 있다.

  3. 코드 가독성의 중요성을 이해할 수 있다.

  4. 메서드 추출(Extract)을 통해 기능별로 메서드의 로직을 분리할 수 있다.

  5. 클래스를 이용해 역할 분리의 개념을 이해할 수 있다.


섹션 2: 할 일 관리(Todo list) 애플리케이션 제작 (1)

섹션 2에서는 할 일을 관리하는 애플리케이션을 만들어 봅니다.

할 일 관리 애플리케이션은 TodoList라는 이름으로 잘 알려져 있으며, 웹 프로그래밍에 입문할 때 가장 많이 사용되는 주제 중 하나입니다.


할 일을 등록하고, 등록된 할 일을 완료 처리하는 간단한 기능이라고 생각할 수 있지만 이 간단한 기능을 막상 직접 구현해 보라고 하면 망설이는 분들이 꽤 있을 거라 생각합니다.

게다가 애플리케이션의 코드 퀄리티나 코드 가독성, 단위 테스트 케이스까지 고려한다면 만만하게 볼 수만도 없습니다. ^^;

강의에서는 그냥 단순히 실행되는 애플리케이션을 만드는 것에서 그치는 게 아니라 다음과 같이 꽤나 중요한 것들을 배울 수 있습니다.


섹션 2에서 알게 되는 것들

  1. 만들어야 할 애플리케이션의 대략적인 요구사항을 클래스와 메서드의 틀로 표현하는 방법과 이렇게 표현하면 어떤 장점이 있는지를 이해할 수 있습니다.

  2. 특정 기능을 구현하기 위한 생각의 흐름을 코드로 먼저 표현한 후에 해당 기능을 구체적으로 구현하는 방법을 이해할 수 있습니다.

  3. 단위 테스트 코드를 단계적으로 완성하는 방법을 이해할 수 있습니다.

  4. 도메인 규칙이 적용된 도메인 로직을 서비스 코드에서 분리하는 방법분리하면 왜 좋은지를 이해할 수 있습니다.

  5. 도메인 주도 개발에서 사용하는 D.I.P(Dependency Inversion Principle, 의존성 역전의 원칙) 설계 원칙의 기본을 이해할 수 있습니다.


프로젝트 목표

  • 클래스와 메서드의 틀을 이용해 애플리케이션의 기본 구조를 만들어가는 방법을 이해할 수 있다.

  • 할 일 데이터를 이용해 간단한 할 일 등록 로직을 구현할 수 있다.

  • 레이어드 아키텍처(Layered Architecture)를 이해할 수 있다.

  • Java의 Map을 인 메모리 데이터 저장소처럼 사용할 수 있다.

  • 빈약한 도메인 모델(Anemic Domain Model)과 풍부한 도메인 모델(Rich Domain Model)의 차이점을 이해할 수 있다.

  • D.I.P(Dependency Inversion Principle) 설계 원칙의 기본 개념과 이 원칙을 적용하는 이유를 이해할 수 있다.


섹션 3: 할 일 관리(Todo list) 애플리케이션 제작 (2)

섹션 3에서는 Google Tasks API 기술을 이용해 섹션 2에서 만든 할 일 관리 애플리케이션의 할 일 데이터를 지속 가능하게 관리할 수 있도록 업그레이드해 봅니다.


물론 처음부터 Google Tasks API를 사용해서 할 일 관리 애플리케이션을 만들어볼 수도 있지만 그렇게 하면 애플리케이션을 구현하는 동안 너무 많은 지식들을 머리속에 집어 넣어야하기 때문에 바람직하지 않다고 생각했습니다.


어쨌든 섹션 2에서 할 일 관리 애플리케이션을 잘 만들어 놓았다면 섹션 3에서 다음 내용들을 학습하는데 집중할 수 있습니다.


섹션 2에서 알게 되는 것들

  1. Google에서 제공하는 서비스(Google Tasks, Google Drive, Google Calendar 등)들을 이용하기 위한 공통된 절차를 이해할 수 있습니다.

  2. Google에서 제공하는 서비스를 사용하기 위한 인증 과정을 큰 흐름에서 이해할 수 있습니다.

  3. 특정 기술을 학습하기 위한 목적으로 테스트 케이스를 작성하는 이유와 장점을 이해할 수 있습니다.

  4. 테스트 과정에서의 전처리, 후처리 과정이 필요한 이유를 이해할 수 있고, 테스트 케이스에 적용할 수 있습니다.

  5. D.I.P(Dependency Inversion Principle) 설계 원칙이 적용된 데이터 레이어에서 데이터 접근 기술을 유연하게 변경할 수 있게됩니다.

  6. 서로 다른 타입의 객체들 간에 데이터를 주고 받기 위한 Converter를 적용할 수 있습니다.

  7. Object Factory + Singleton 패턴을 이용해 애플리케이션에서 사용되는 객체를 한 곳에서 관리하는 방법을 이해할 수 있습니다.


프로젝트 목표

  • 특정 기술을 이해하기 위한 학습 테스트에 대한 개념을 이해할 수 있다.

  • 외부 API 서비스의 개념을 이해할 수 있다.

  • Google Tasks API 서비스를 이용해 할 일을 관리할 수 있다.

  • DIP(Dependency Inversion Principle)를 적용해 데이터 레이어의 기술을 유연하게 적용할 수 있다.

  • 팩토리의 개념을 이해할 수 있고 Factory를 이용해 객체를 생성할 수 있다.

  • RFC-3339에 명시된 날짜와 시간에 대한 개념을 이해하고 Java API를 이용해 애플리케이션에서 사용할 수 있다.


궁금한 점이 있나요?

Q. Java 1부 강의를 수강하려면 Java만 할 줄 알면 되나요? Java를 어느 수준까지 다룰 수 있으면 될까요?

Java 1부 강의에서는 총 세 개의 미니 프로젝트를 구현하는데 그 중에 두 개 프로젝트는 순수하게 Java만 사용해서 애플리케이션을 구현하며, 나머지 한 개의 프로젝트는 Google Tasks API라는 기술을 추가적으로 사용해서 애플리케이션을 구현합니다.

Google Tasks API에 대한 사용 경험이 없으신 분들이 다수 있을 수 있기 때문에 Google Tasks API의 사용법에 대한 내용이 강의 안에 일정 부분 포함되어 있습니다.


결론을 말씀드리면 기본적으로 Java의 기본(변수, 데이터 타입, 표준 입출력, 클래스, 인터페이스의 개념 등) 지식만 일정 부분 가지고 있다면 이번 강의를 수강하실 수 있습니다.


다만, 강의 중간 중간에 학생들이 처음 접할 수 있는 내용(테스트 기법, 객체지향 설계 기법 등)들이 포함이 되어 있지만 이런 내용들은 강의를 들으면서 알아가면 된다고 생각합니다.

Q. 이 강의를 왜 들어야 할까요?

앞에서도 잠깐 말씀드렸지만 부트캠프나 컴퓨터 학원 등에서 프로그래밍 언어를 배울 때 가장 막막한 부분은 바로 내가 학습한 프로그래밍 언어를 이용해 눈에 보이는 무언가를 어떻게 만들어야 하는지 잘 모르겠다 라는 것입니다.

작은 미니 애플리케이션이긴하지만 학생들 스스로 생각하고, 고민하면서 직접 애플리케이션을 구현함으로 인해 "나도 무언가를 스스로 만들 수 있다" 라는 자신감을 가질 수 있게 하는 것 그리고 "개발자로서 앞으로 가야할 방향성을 깨닫게 해주는 것"이 이번 강의 시리즈의 핵심 목표입니다.

그렇기 때문에 애플리케이션 구현에 어려움을 겪는 분에게는 괜찮은 도움을 줄 수 있으리라 생각합니다.

Q. Java 개발자가 되기 위해서는 Spring Framework을 필수로 알아야 하는 것 같던데 정말 Spring을 몰라도 괜찮나요?

Spring에 대한 지식이 전혀 없어도 상관없습니다.

Java 기반의 웹 애플리케이션 개발을 이야기하는데 있어 Spring Framework을 빼놓고 이야기할 수는 없겠지만 Java의 기본이 되어 있지 않은 상태에서 Spring Framework을 애플리케이션에서 사용하려다 벽에 부딪치는 학생들을 많이 봐왔습니다.

이런 문제를 겪게 하고 싶지 않은 바램이 포함된 강의라고 생각하시면 될 것 같아요.

Q. Java를 이용해서 스스로 무언가를 만든다는 것 자체가 너무 막연하기도 하고 조금은 두렵기도 합니다. 이 강의를 들으면 이런 기분이 사라질까요?

이 강의를 그냥 듣기만 해서는 그런 기분이 사라지지 않을 것 같습니다.^^;

다만, 제가 권장 드리는 방식으로 강의를 끝까지 수강하시고 강의에 나오는 내용들을 내 것으로 만들 수 있다면 적어도 구현에 대한 두려움은 확실히 없앨 수 있을 거라고 확신합니다.

Q. 제가 구현한 코드와 강사님이 구현한 코드가 많이 다를 수도 있을 것 같은데 어떻게 해야 하나요?

아무래도 여러분들보다 제가 개발을 더 많이 해본 경험이 있기 때문에 제가 작성한 코드가 조금 더 나은 코드일 가능성이 높다고 생각합니다.(그렇지 않다고 생각된다면 언제든 의견 주시면 감사드릴게요. ^^;)

만약 제가 작성한 코드가 조금 더 나은 코드라는 생각이 든다면 여러분들이 구현한 코드에 제가 작성한 코드를 적용해 보시길 권장 드립니다.

물론 더 나은 코드인지 아닌지 판단이 서지 않을 수도 있고, 내가 작성한 코드에 다른 사람의 코드를 적용하려면 꽤나 시간이 걸릴 수도 있어요.

하지만 직접 적용을 해봐야 이게 좋은 코드인지 나쁜 코드인지에 대한 판단도 더 잘할 수 있고, 여러분들의 실력도 더 향상된다고 생각합니다.


Q. 강의에서 설명하는 강의 자료 및 소스 코드는 어디서 다운로드할 수 있을까요?

  • 강의에서 설명하는 강의 자료 및 소스 코드를 다운로드 하시려면 아래의 학습 자료 항목에 기재된 Github 링크를 클릭하신 후 해당 Repository에서 다운로드 하시면 됩니다.

수강 전 참고 사항

실습 환경

  • 운영 체제 및 버전(OS)

    • PC 환경의 OS라면 어떤 OS든 상관 없습니다.

    • 다만 JDK 17 이상이 설치 가능해야하며, IntelliJ IDE가 실습을 진행하는데 무리 없을 정도의 컴퓨팅 파워(CPU, 메모리 등)를 갖추는 것이 좋습니다.

  • 사용 도구

    • JDK 17(최소 사양)

    • IntelliJ IDE

      • 강의에서 사용하는 IntelliJ IDE는 Ultimate 버전이지만 무료 버전인 Community 버전을 사용하셔도 전혀 문제가 되지 않습니다.

      • IntelliJ IDE가 아니더라도 잘 다루는 코드 편집 툴(Visual Studio Code 등)이 있다면 사용하셔도 무방합니다.

    • Gradle 7.3(최소 사양) 이상

      • JDK 17에 호환되는 Gralde 버전이 7.3이기 때문에 둘 사이의 버전을 맞추어 두었습니다.

      • 버전 호환성 때문에 문제가 발생한다면 Java Compatibility를 참고하셔서 가급적 버전을 맞춰주시면 좋을 것 같습니다.

    • JUnit 5(최소 사양) 이상


유의사항

  • 강의에서 사용되는 학습 자료 및 코드를 블로그 등 개인 공간에서 사용하시려면 강의 제목 및 강사 이름을 기재하시고 강의 링크를 추가해 주셔야 합니다. 그 외에 무단 배포는 허용되지 않으니 양해 부탁드릴게요.

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • Java를 공부했지만 Java로 무얼해야 하는지 모르는 사람

  • Java의 문법 학습으로 지루함을 느끼는 사람

  • Java의 문법은 알고 있지만 뭘 구현해보라고 하면 어디서부터 구현해야 할지 모르는 사람

  • 백엔드 개발자가 되기 위해 Java의 기본을 확실히 다지고 싶은 사람

  • Java 애플리케이션을 구현하는 즐거움을 느끼고 싶은 사람

  • 스스로 생각하고, 고민하면서 애플리케이션을 구현하는 연습이 필요한 사람

  • 애플리케이션 구현 관점에서 Java를 잘 다루지 못하는 사람

선수 지식,
필요할까요?

  • Java

  • 스스로 생각하는 연습

안녕하세요
Kevin입니다.

6,078

수강생

220

수강평

104

답변

4.8

강의 평점

6

강의

- 주력 언어 또는 기술 : Java, Spring Framework, RxJava, Reactor, Spring WebFlux

- (주)코드스테이츠(https://www.codestates.com)에서 Senior Educational Software Engineer(Backend)로 활동
(From 2022.03 To 2024.01.31)

- 프리랜서 개발자 및 강사로 활동(From 2024.02)

- 저서

안녕하세요? Kevin이라고 합니다. ^^

인프런에서 이렇게 강사로서 여러분들을 만나게 되어서 너무 반갑습니다.

어떤 분야든 마찬가지겠지만 특히나 소프트웨어 개발자는 끊임없이 변화하는 트렌드에 뒤처지지 않도록 항상 자기 자신을 갈고 닦는것이 개발자로써 살아남는 유일한 방법이라고 생각하며 항상 배우는 자세로 즐겁게 소프트웨어 개발을 하고 있는 개발자 중 한 명입니다.

제가 가지고 있는 지식과 경험이 다른 분들에게 조금이나마 도움이 되기를 바라면서 인프런에서 강좌를 시작하였습니다.

앞으로 수강생분들에게 현실적으로 도움이 되는 다양한 강좌로 꾸준히 찾아뵙도록 하겠습니다. 감사합니다.

 

질문이나 의견은 언제든지 환영하니, 이메일(it.village.host@gmail.com)로 편하게 얘기해주세요.

 

더보기

커리큘럼

전체

40개 ∙ (13시간 52분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

전체

3개

5.0

3개의 수강평

Kevin님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

₩46,200

30%

₩66,000