Giter Club home page Giter Club logo

effective-java's Introduction

Effective-Java

GDSC 1기 이펙티브 자바스터디 레포입니다 🙆🏻‍♀️


📁 Project Structure

│
├─ Effective-Java
│     │
│     ├─ ImNM (dir)
│     │     │
│     │     ├─  2장_객체_생성과_파괴 (dir)
│     │     │    ├─ item1.md
│     │     │    ├─ item2.md
│     │     │    ├─ item3.md
│     │     │    ├─ ...
│     │     ├─  3장_모든_객체의_공통_메서드(dir)
│     │     │    ├─ item11.md
│     │     │    ├─ item12.md
│     │     │    ├─ ...
│     │     ├─ .. 이하동일
│     │
│     ├─ binary-ho (dir)
│     │     │
│     │     ├─  .. 이하동일
│     │
│     ├─ .. 이하 동일
│
│

🔏 Rule

  1. 아이템 개수
    • 9개로 시작해서 유동적으로 결정
  2. 일정
    • Google meet 온라인 (+ 오프라인)
    • 매주 화요일 16:100 ~ 17:30
  3. 커뮤니케이션 툴
    • 급한 일정은 카톡!
    • 디스코드 이펙티브 자바 방 활용
  4. 스터디 방식
    • 각자 모든 item 공부 및 간단히 정리(요약+느낀점 좋아요)

👨🏻‍💻Process

  1. 서적과 강의보고 자유롭게 정리
  2. 본인 깃허브이름의 branch 생성 후 커밋
  3. 발표 전까지 정리한 내용 Pull Request 생성
  4. 화요일 오후 4시 발표
  5. 발표&질문 끝나면 Approve 체크

📚 Items

2장 : 객체 생성과 파괴

  • Item1 : 생성자 대신 정적 팩터리 메서드를 고려하라
  • Item2 : 생성자에 매개변수가 많다면 빌더를 고려하라
  • Item3 : private 생성자나 열거 타입으로 싱글터임을 보증하라
  • Item4 : 인스턴스화를 막으려거든 private 생성자를 사용하라
  • Item5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
  • Item6 : 불필요한 객체 생성을 피하라
  • Item7 : 다 쓴 객체 참조를 해제하라
  • Item8 : finalizer와 cleaner 사용을 피하라
  • Item9 : try-finally보다는 try-with-resources를 사용하라

3장 : 모든 객체의 공통 메서드

  • Item10 : equals는 일반 규약을 지켜 재정의하라
  • Item11 : equals를 재정의하려거든 hashCode도 재정의하라
  • Item12 : toString을 재정의하라
  • Item13 : clone 재정의는 주의해서 진행하라
  • Item14 : Comparable을 구현할지 고려하라

4장 : 클래스와 인터페이스

  • Item15 : 클래스와 멤버의 접근 권한을 최소화하라
  • Item16 : public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라
  • Item17 : 변경 가능성을 최소화하라
  • Item18 : 상속보다는 컴포지션을 사용하라
  • Item19 : 상속을 고려해 설계하고 문서화하라
  • Item20 : 추상 클래스보다는 인터페이스를 우선하라
  • Item21 : 인터페이스는 구현하는 쪽을 생각해 설계하라
  • Item22 : 인터페이스는 타입을 정의하는 용도로만 사용하라
  • Item23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라
  • Item24 : 멤버 클래스는 되도록 static 으로 만들라
  • Item25 : 톱레벨 클래스는 한 파일에 하나만 담으라

5장 : 제네릭

  • Item26 : 로 타입은 사용하지 말라
  • Item27 : 비검사 경고를 제거하라
  • Item28 : 배열보다는 리스트를 사용하라
  • Item29 : 이왕이면 제네릭 타입으로 만들라
  • Item30 : 이왕이면 제네릭 메서드로 만들라
  • Item31 : 한정적 와일드카드를 사용해 API 유연성을 높이라
  • Item32 : 제네릭과 가변인수를 함께 쓸 때는 신중하라
  • Item33 : 타입안정 이종 컨테이너를 고려하라

6장 : 열거 타입과 애너테이션

  • Item34 : int 상수 대신 열거 타입을 사용하라
  • Item35 : ordinal 메소드 대신 인스턴스 필드를 사용하라
  • Item36 : 비트 필드 대신 EnumSet을 사용하라
  • Item37 : EnumMap 을 사용하라
  • Item38 : 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
  • Item39 : 명명 패턴보다 Annotation을 사용하라
  • Item40 : 어노테이션을 일관되게 사용하라
  • Item41 : 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라

7장 : 람다와 스트림

  • Item42 : 익명 클래스보다 람다를 사용하라
  • Item43 : 람다보다는 메서드 참조를 사용하라
  • Item44 : 표준 함수형 인터페이스를 사용하라
  • Item45 : 스트림은 주의해서 사용하라
  • Item46 : 스트림에서는 부작용 없는 함수를 사용하라
  • Item47 : 반환 타입으로는 스트림보다 컬렉션이 낫다
  • Item48 : 스트림 병렬화는 주의해서 사용하라

8장 : 열거 타입과 애너테이션

  • Item49 : 매개변수가 유효한지 검사하라
  • Item50 : 적시에 방어적 복사본을 만들라
  • Item51 : 메서드 시그니처를 신중히 설계하라
  • Item52 : 다중정의는 신중히 사용하라
  • Item53 : 가변인수는 신중히 사용하라
  • Item54 : null 이 아닌, 빈 컬렉션이나 배열을 반환하라
  • Item55 : 옵셔널 반환은 신중히 해라
  • Item56 : 항상 문서화 주석을 작성하라

9장 : 일반적인 프로그래밍

  • Item57 : 지역변수의 범위를 최소화하라
  • Item58 : 전통적 for 문 보다는 for-each 문을 사용하라
  • Item59 : 지역변수의 범위를 최소화하라
  • Item60 : 정확한 답이 필요하다면 float와 double은 피하라
  • Item61: 박싱된 기본 타입보다는 기본 타입을 사용하라
  • Item62: 다른 타입이 적절하다면 문자열 사용을 피하라
  • Item63: 문자열 연결은 느리니 주의하라
  • Item64: 객체는 인터페이스를 사용해 참조하라
  • Item65: 리플렉션보다는 인터페이스를 사용하라
  • Item66: 네이티브 메서드는 신중히 사용하라
  • Item67: 최적화는 신중히 하라
  • Item68: 일반적으로 통용되는 명명 규칙을 따르라

10장 : 예외

  • Item69: 예외는 진짜 예외 상황에만 사용하라
  • Item70: 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라
  • Item71: 필요 없는 검사 예외 사용은 피하라
  • Item72: 표준 예외를 사용하라
  • Item73: 추상화 수준에 맞는 예외를 던지라
  • Item74: 메서드가 던지는 모든 예외를 문서화하라
  • Item75: 예외의 상세 메시지에 실패 관련 정보를 담으라
  • Item76: 가능한 한 실패 원자적으로 만들라
  • Item77: 예외를 무시하지 말라

11장 : 동시성

  • Item78: 공유 중인 가변 데이터는 동기화해 사용하라
  • Item79: 과도한 동기화는 피하라
  • Item80: 스레드보다는 실행자, 태스크, 스트림을 애용하라
  • Item81: wait와 notify보다는 동시성 유틸리티를 애용하라
  • Item82: 스레드 안전성 수준을 문서화하라
  • Item83: 지연 초기화는 신중히 사용하라
  • Item84: 프로그램의 동작을 스레드 스케줄러에 기대지 말라

12장 : 12장 직렬화

  • Item85: 자바 직렬화의 대안을 찾으라
  • Item86: Serializable을 구현할지는 신중히 결정하라
  • Item87: 커스텀 직렬화 형태를 고려해보라
  • Item88: readObject 메서드는 방어적으로 작성하라
  • Item89: 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라
  • Item90: 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라

📝 해당 주차 과제 가이드

📤 프로젝트 열기

  • 프로젝트를 하나 생성하고 IntelliJ에서 원격 저장소를 연결해줍니다
  • git init // 원격 저장소 init
  • git remote -v https://github.com/GDSC-Hongik/Effective-Java.git // 원격 저장소 연결
  • git pull origin main
  • IntelliJ의 terminal에서 자신의 branch로 checkout을 해주세요
    • git checkout origin [본인 github 아이디]
  • 작업은 해당 본인 branch에서만 진행해주세요 (❌master branch❌)
    • git branch : 현재 branch 확인

🏡 작업공간 생성

  • Effective-Java (프로젝트 루트 디렉토리)
    • 본인 github 아이디명의 디렉토리 (본인 github 아이디로 설정해주세요!)
      • 해당 단원
        • 해당 아이템

| 본인 github 아이디명의 디렉토리부터 만들고 시작하시면 됩니다! 😊


💾 중간 중간 commit 하기

  • 파트 별로 작업을 끝냈거나 더 작은 단위로 작업을 끝낼 때 마다 commit을 해 주는 게 좋아요

  • ❗commit convention ❗️

    • Feat: 새로운 기능 추가
    • Fix: 버그 수정
    • Docs: 문서 수정
    • Style: 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
    • Refactor: 코드 리펙토링
    • Test: 테스트 코드, 리펙토링 테스트 코드 추가
    • Chore: 빌드 업무 수정, 패키지 매니저 수정
  • 예시: git commit -m "[Feat(해당 파일): OO 기능 추가]"

✍🏻 README.md 파일 작성하기

  • 해당 주차 책을 공부하면서 알게 된 부분, 중요하다고 생각한 부분이 있다면 정리해 주세요!

    • 개념 정립도, 요약도 모두 좋습니다! 😊
  • 해당 주차 강의를 들으면서 새롭게 알게 된 사실이나 추가적으로 더 공부한 부분이 있다면 정리해 주세요!

    • 요약도, 복습도 모두 좋습니다! 😊😊
  • .md 파일은 mark down 언어로 작성된 파일을 뜻해요


🙌🏻 Github 레포지토리에 push하기

  • 해당 주차의 강의를 모두 듣고 작업을 모두 끝냈다면, 프로젝트 변경 사항을 remote repository(github repository)에 push 합니다
    • git push origin [본인 github 아이디 브랜치 명] : git에 등록되어 있는 origin(github repository)에 있는 자신의 branch로 프로젝트의 변경 사항을 반영합니다
  • push를 완료했다면 스터디 repository에서 pull request를 진행합니다
  • PR(Pull Request)시 메세지 제목은 다음과 같이 [1기_OOO] 1주차 제출합니다. 라고 적은 후 create pull request 버튼을 눌러주세요
  • PR : base: [main] <- compare: [본인 github 아이디]

⏰ 과제 제출 마감 기한

  • 이펙티브 자바 스터디는 매주 화요일 오후 4시입니다! 스터디 시작 10분전까지 제출해주세용~!

effective-java's People

Contributors

binary-ho avatar imnm avatar jjddhh avatar ksk0605 avatar younggyo-00 avatar

Stargazers

 avatar

Watchers

 avatar

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.