Giter VIP home page Giter VIP logo

java-study's Introduction

멋사 9기 자바 스터디

멋사 9기 자바 스터디 저장소입니다.

영감을 받은 스터디

https://github.com/whiteship/live-study

스터디원

스터디 규칙

  1. 매주 공부할 주제가 이슈에 등록됩니다.
  2. 매주 화요일 자정까지 해당 주차의 이슈에 대한 내용을 공부하고 댓글로 링크를 첨부합니다.
    • 공부한 내용을 블로그, 레포지토리 등 공개된 곳에 업로드하고 링크를 첨부해주시면 됩니다.
    • 공부하면서 잘 이해가 안 가는 부분, 정확한지 애매한 부분, 스터디원들끼리 더 얘기해보면 좋겠다고 생각되는 부분이 있으면 이에 대한 코멘트를 링크와 함께 남겨주세요.
  3. 매주 목요일 10시 온라인 회의를 합니다.
    • 회의 전까지 다른 스터디원들이 남긴 코멘트에 대해 고민해오세요.

참고자료

무엇이든 상관 없습니다. 참고할만한 책과 링크 공유드립니다.

교재 및 강의

자바의 정석 - 저자 직강 유튜브 강의 링크입니다. 저는 이걸로 공부했는데 기본 개념이나 동작 원리를 자세하게 설명해줘서 좋았습니다. 강의에는 건너뛰는 부분이 좀 있어서 책과 함께 공부하시는거 추천합니다.

이것이 자바다 - 마찬가지로 저자 직강 유튜브 강의입니다.

소설같은 자바 - 옛날 책이라 자바 8에 대한 내용이 없습니다. 근데 앞부분에 데이터 타입이랑 클래스에 대해 설명하는 부분이 너무 좋아서 공유합니다. 이 책은 그 부분만 읽으면 됩니다. 학교 도서관에 있습니다.

Java 10 var 제대로 사용하기

https://dev.to/composite/java-10-var-3o67

https://dev.to/composite/java-10-var-2-4f8a

JVM의 메모리 구조

https://dev.to/deepu105/visualizing-memory-management-in-jvm-java-kotlin-scala-groovy-clojure-19le

checked vs unchecked

https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

Java에서 동치성(equality) 메서드를 작성하는 방법

https://www.artima.com/articles/how-to-write-an-equality-method-in-java

아.. 뭔가 만들어보고 싶다.

단순히 문법 공부만 하는 것이 아니라 뭔가 만들어보면서 능동적으로 공부하고 싶을 때 참고할만한 자료들을 첨부합니다.

자바 플레이그라운드 - 자바지기 박재성님이 넥스트에서 강의하신 내용을 무료로 공개해놓은 것입니다. 기본 문법만 알면 만들 수 있는 콘솔 기반의 간단한 프로그램 예제들이 수록되어 있습니다.

프로그래밍 경력을 향상시킬 20 가지 놀라운 Java 프로젝트 아이디어 - ICHI.PRO라는 사이트에 있는 글입니다. 꽤나 난이도가 있는 흥미로운 프로그램 예제들이 제시되어 있습니다.

java-study's People

Contributors

awesomeo184 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

java-study's Issues

7주차 과제: 패키지

목표

자바의 패키지에 대해 학습하세요.

공부할 것

  • package 키워드
  • import 키워드
  • 클래스패스
  • CLASSPATH 환경변수
  • -classpath 옵션
  • 접근지시자

2주차 과제: 자동차 경주 게임 만들기

미션 - 자동차 경주 게임

(출처: https://github.com/woowacourse/java-racingcar-precourse)

🚀 기능 요구사항

  • 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
  • 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
  • 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
  • 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
  • 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.

✍🏻 입출력 요구사항

⌨️ 입력

  • 경주 할 자동차 이름(이름은 쉼표(,) 기준으로 구분)
pobi,woni,jun
  • 시도할 회수
5

🖥 출력

  • 각 차수별 실행 결과
pobi : --
woni : ----
jun : ---
  • 단독 우승자 안내 문구
최종 우승자: pobi
  • 공동 우승자 안내 문구
최종 우승자: pobi, jun
  • 예외 상황 시 에러 문구를 출력해야 한다. 단, 에러 문구는 [ERROR] 로 시작해야 한다.
[ERROR] 시도 횟수는 숫자여야 한다.

💻 프로그래밍 실행 결과 예시

경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)
pobi,woni,jun
시도할 회수는 몇회인가요?
5

실행 결과
pobi : -
woni : 
jun : -

pobi : --
woni : -
jun : --

pobi : ---
woni : --
jun : ---

pobi : ----
woni : ---
jun : ----

pobi : -----
woni : ----
jun : -----

최종 우승자: pobi, jun

🎱 프로그래밍 요구사항

  • 자바 코드 컨벤션을 지키면서 프로그래밍한다.
    • 기본적으로 Google Java Style Guide을 원칙으로 한다.
    • 단, 들여쓰기는 '2 spaces'가 아닌 '4 spaces'로 한다.
  • indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.
    • 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
  • 3항 연산자를 쓰지 않는다.
  • 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라.
  • 프로그래밍 요구사항에서 별도로 변경 불가 안내가 없는 경우 파일 수정과 패키지 이동을 자유롭게 할 수 있다.
  • 예외 상황 시 에러 문구를 출력해야 한다. 단, 에러 문구는 [ERROR] 로 시작해야 한다.

추가된 요구사항

  • 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.
    • 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다.
  • else 예약어를 쓰지 않는다.
    • 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
    • else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.

프로그래밍 요구사항 - Application

  • Application 클래스를 활용해 구현해야 한다.
  • Application의 패키지 구조와 구현은 변경하지 않는다.
  • final Scanner scanner = new Scanner(System.in);는 변경하지 않는다.
  • // TODO 구현 진행 이 후 부터 구현한다.
public class Application {
    public static void main(String[] args) {
        final Scanner scanner = new Scanner(System.in);
        // TODO 구현 진행
    }
}

프로그래밍 요구사항 - RandomUtils

  • RandomUtils 클래스를 활용해 랜덤 기능을 구현해야 한다.
  • RandomUtils의 패키지 구조와 구현은 변경하지 않는다.
private static final Random RANDOM = new Random();
    private RandomUtils() {
    }
    public static int nextInt(final int startInclusive, final int endInclusive) {
    ...

프로그래밍 요구사항 - Car 객체

  • 다음 Car 객체를 활용해 구현해야 한다.
  • Car 기본 생성자를 추가할 수 없다.
  • name, position 변수의 접근 제어자인 private을 변경할 수 없다.
  • 가능하면 setPosition(int position) 메소드를 추가하지 않고 구현한다.
public class Car {
    private final String name;
    private int position = 0;

    public Car(String name) {
        this.name = name;
    }

    // 추가 기능 구현
}

📈 진행 요구사항


📝 License

This project is MIT licensed.

10주차 과제: 멀티스레드 프로그래밍

목표

자바의 멀티스레드 프로그래밍에 대해 학습합니다.

공부할 것

  • Thread 클래스와 Runnable 인터페이스
  • 쓰레드의 상태
  • 쓰레드의 우선순위
  • Main 쓰레드
  • 동기화
  • 데드락

6주차 과제: 상속

목표

자바의 상속에 대해 공부하세요.

공부할 것

  • 자바 상속의 특징
  • super 키워드
  • 메소드 오버라이딩
  • 다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
  • [optional] 더블 디스패치(Double Dispatch)
  • 추상 클래스
  • final 키워드 (optional. 유사 파이널)
  • Object 클래스

탐구심이 있으신 분들은 더블 디스패치에 대해서도 공부해보세요. 쉽지 않은 내용이므로 이해가 안되시면 그냥 넘어가도 좋습니다.

참고할만한 영상을 공유합니다.

https://www.youtube.com/watch?v=s-tXAHub6vg

5주차 과제: 클래스

목표

자바의 클래스에 대해 학습하세요.

학습할 것

  • 클래스 정의하는 방법
  • 객체 만드는 방법 (new 키워드 이해하기)
  • 메소드 정의하는 방법
  • 생성자 정의하는 방법
  • this 키워드 이해하기

2주차: 자바 데이터 타입, 변수 그리고 배열

목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

❗️링크 올리면서 회의때 이야기해보면 좋을 것 같은 주제 혹은 잘 이해가 안되었던 내용을 같이 올려주세요!

14주차 과제: 제네릭

목표

자바의 제네릭에 대해 학습하세요.

학습할 것 (필수)

  • 제네릭 사용법
  • 제네릭 주요 개념 (바운디드 타입, 와일드 카드)
  • 제네릭 메소드 만들기
  • Erasure

제네릭은 어렵습니다... 실제 코드를 작성하면서 이해해보려고 노력해보세용

1주차 과제: 문자열 계산기 만들기

문자열 계산기 만들어보기

기능적 요구사항

  • 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다.
  • 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다.
  • 예를 들어 2 + 3 * 4 / 2와 같은 문자열을 입력할 경우 (2 + 3) * 4 / 2 실행 결과인 10을 출력해야 한다.
  • 입력 가능한 숫자는 양의 정수로 제한한다.
  • 사용자가 exit을 입력하기 전까지 기능을 반복적으로 수행한다.
  • 예외가 발생하면 [ERROR] 에러 메시지 형식으로 메시지를 출력하고 입력을 다시 받는다.
    • 예를 들어, 입력으로 2 q 4 이 들어온다면 [ERROR] 잘못된 연산자를 사용하셨습니다 를 출력하고 입력을 다시 받는다.
  • 입출력 메시지나 에러 메시지는 본인이 원하는대로 하면 된다.

프로그래밍 제한사항

  • 메서드는 하나의 일만 하도록한다.
  • 하나의 메서드가 10 라인을 넘지 않도록 한다. 어렵다면 최대 15 라인을 넘지 않도록 해본다.
  • else 예약어를 사용하지 않는다.
  • 인덴트는 한 단계를 넘지 않도록 한다. 예를 들어 for문 안에 if 문이 있다면 인덴트는 두 단계이다. 너무 어렵다면 두 단계도 허용한다.
  • 코드를 더 개선해보고 싶다면 객체지향 생활 체조 9원칙을 참고해 리팩토링 해본다.
  • 기능을 구현하기 전에 README.md에 구현할 기능 목록을 정리해 추가한다.
  • README.md 에 기능 요구사항을 정리해보고 적절한 단위로 커밋을 나눠서 커밋해보자.
  • git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.

입출력 예시

💻 입력

  • 입력 1
실행할 연산을 입력해주세요:
2 + 3 * 4 / 2
  • 입력 2
실행할 연산을 입력해주세요:
exit

💻 출력

  • 출력 1
10
  • 출력 2
프로그램을 종료합니다.

추가적으로 해보면 좋을 것들

  1. JUnit을 학습하고 단위테스트 작성해보기
  2. 람다나 스트림을 적용할 수 있는 곳이 있는지 고민해보고 리팩토링 해보기

제출은 일단 본인이 원하는 방법으로 자유롭게 해봅시다.

권장드리는 방법은 현재 레포지토리를 fork/clone한 후 각자의 브랜치를 만들어서 작업을 하고 결과물을 풀리퀘스트하는 것입니다.

궁금하신 사항 있으면 댓글 달아주세요.

4주차: 제어문

목표

자바가 제공하는 제어문을 학습하세요.

학습할 것

선택문
반복문

11주차 과제: Enum

목표

자바의 열거형에 대해 학습하세요.

학습할 것

  • enum 정의하는 방법
  • enum이 제공하는 메소드 (values()와 valueOf())
  • java.lang.Enum
  • EnumSet

9주차 과제: 예외처리

목표

자바의 예외 처리에 대해 학습하세요.

학습할 것

  • 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
  • 자바가 제공하는 예외 계층 구조
  • Exception과 Error의 차이는?
  • RuntimeException과 RE가 아닌 것의 차이는?
  • 커스텀한 예외 만드는 방법

3주차: 연산자

목표

자바에서 제공하는 다양한 연산자를 학습합니다.

공부할 내용

  • 산술 연산자
  • 비트 연산자
  • 관계 연산자
  • 논리 연산자
  • instanceof
  • assignment(=) operator
  • 화살표(->) 연산자
  • 3항 연산자
  • 연산자 우선 순위
  • (optional) Java 13. switch 연산자

다음주까지만 하고 시험 끝날 때까지 잠깐 멈춥니다.

13주차 과제: I/O

목표

자바의 Input과 Ontput에 대해 학습하세요.

학습할 것 (필수)

  • 스트림 (자바8 Stream API 아님!) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O
  • InputStream과 OutputStream
  • Byte와 Character 스트림
  • 표준 스트림 (System.in, System.out, System.err)
  • 파일 읽고 쓰기

15주차 과제: 람다식

목표

  • 자바의 람다식에 대해 학습하세요.

학습할 것 (필수)

  • 람다식 사용법
  • 함수형 인터페이스
  • Variable Capture
  • 메소드, 생성자 레퍼런스

1주차: JVM은 무엇이며, 자바 프로그램은 어떻게 실행되는가

목표

  • 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.

학습할 것

  • JVM이란 무엇인가
  • 컴파일 하는 방법
  • 실행하는 방법
  • 바이트코드란 무엇인가
  • JIT 컴파일러란 무엇이며 어떻게 동작하는지
  • JVM 구성 요소
  • JDK와 JRE의 차이

대부분의 자바 기본서 인트로에 나오는 내용입니다. 깊게 파고 들어가면 한 없이 파고들 수 있는 부분이라서, 최소한 자바 소스 파일이 어떤 과정을 거쳐서 실행되는지 간략히 설명할 수 있을 정도로 공부하시면 될 것 같습니다. 물론 깊게 파고 들어가는 것은 본인 자유입니다.

8주차 과제: 인터페이스

목표

자바의 인터페이스에 대해 학습하세요

공부할 것

  • 인터페이스 정의하는 방법
  • 인터페이스 구현하는 방법
  • 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
  • 인터페이스 상속
  • 인터페이스의 기본 메소드 (Default Method), 자바 8
  • 인터페이스의 static 메소드, 자바 8
  • 인터페이스의 private 메소드, 자바 9

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.