데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [데보션영과 함께하는 책읽기-21편] Effective Java 도서스터디 후기

      쟈스틴_ 24.11.29
      753 2 0
      DEVOTEE 요약
      효과적인 자바 개발을 위한 '이펙티브 자바' 책을 함께 공부하는 스터디 경험을 공유한 글입니다. 객체 생성과 메서드 설계, 제네릭 활용 등 다양한 주제를 토론하며 책의 깊은 내용을 이해하고 실무에 적용할 기회를 얻었습니다. 팀원들은 책의 어려운 내용을 스터디를 통해 함께 극복하며, 추후 다시 읽어볼 계획을 세웠습니다.

      안녕하세요. 데보션 영 3기 Effective Java 도서스터디팀 입니다.

      저희 팀은 ‘이펙티브 자바’라는 책을 선정해서 스터디를 진행했습니다.

      자바 개발자에게는 바이블과도 같다고 불리는 책인지라 다들 한번쯤 꼭 읽어보고 싶은 마음에 선택했다고 합니다.

      전원 백엔드 개발자로 이루어져 있어서 더더욱 재미있게 읽을 수 있었던 책이었습니다.


      🎯 스터디 진행 방식

      스터디의 경우 책이 굉장히 길기 때문에.. 다양한 방식으로 긴 기간동안 흥미를 잃지 않고 진행해보고자 노력했습니다.

      시간이 다 되는 경우에는 강남역 할리스에 모여서 같이 스터디를 진행했습니다.

      스터디 인원도 많은 편이라 매번 만나기는 쉽지 않았는데요.

      그럴 때는 온라인으로도 적극적으로 모여서 같이 스터디를 진행했습니다.

      책의 내용이 쉬운 편은 아니라 읽고 이해하는데 어려움이 조금 있었는데, 아예 모여서 각자 책읽는 시간을 가져서 바로바로 책을 읽고 이야기를 나누는 방식도 좋았습니다.

      image.png

      image.png

      image.png

      아래는 저희 스터디 팀원들이 스터디 진행 관련 내용을 데보션에 적었던 글들입니다!

      (여름부터 차근차근 달려온 도서스터디팀…🥹)

      https://skdevocean.page.link/GsAYrR728FoEs4mV9

      https://skdevocean.page.link/JDDh1W8htPGbEZDQ9

      https://skdevocean.page.link/8mZzeoKyAubdWCV9A

      https://skdevocean.page.link/3N1yQCTXyzZ5JBDUA


      🎯 스터디 진행 내용

      • 2장 객체 생성과 파괴

      2장에서는 객체의 효율적인 생성과 파괴에 대한 여러 사례에 대해 소개하고 있습니다 🙂

      정적 팩터리 메서드의 활용, 빌더 패턴의 도입, 싱글턴 패턴 구현, 의존 객체 주입, 불필요한 객체 생성을 피하는 방법 등을 통해 코드의 모듈화를 어떻게 해야 유연하게 개발할지

      (다른 개발자와의 협업을 위한) 어떻게 해야 효율적으로 개발할 지에 대해 알아볼 수 있었습니다

      또한, 메모리 누수를 방지하기 위한 참조 해제, finalizer와 cleaner의 사용 지양,

      그리고 자원 관리를 위한 try-with-resources 문법을 사용함으로서의 이점을 알아볼 수 있었습니다.

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

      3장에서는 자바의 클래스 객체가 가져야 할 공통 메서드의 구현 원칙에 대해 소개하고 있습니다.

      equals와 hashCode 메서드 재정의(Override)할 경우 기존에 구현되었던 규약 준수의 중요성, 객체의 정보를 명확히 전달하는 toString 메서드의 재정의가 필요합니다.

      (메모리 위치를 나타내는 것이 아닌 객체 자체에 대한 정보를 담기 위해)

      clone 메서드의 경우 재정의시의 주의사항, 그리고 객체의 자연스러운 정렬을 위한 Comparable 인터페이스 구현함으로서의 이점에 대해 알려주고 있습니다.

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

      클래스와 인터페이스를 설계할 때 접근 권한을 적절히 설정해서 캡슐화와 응집력을 고려해야 합니다.

      특히 학교 수업에서 배웠던 것처럼 언제나.. 접근 권한을 항상 최소화 하라고 이야기 하는 부분이 인상깊었습니다.

      변경 가능성을 줄이고 불변 객체를 선호하며, 상속보다 컴포지션과 인터페이스를 사용해서 안전하고 유연하게 설계해야 합니다.

      • 5장 제네릭

      제네릭을 통해서 코드의 타입 안정성을 보장하고, 유연성과 재사용성을 높일 수 있습니다.

      5장에서는 로 타입 사용의 위험성, 비검사 경고 처리, 배열 대신 리스트 활용,

      제네릭 타입과 메서드 설계, 와일드카드로 API 유연성 강화, 가변인수와의 안전한 조합, 그리고 타입 안전 컨테이너 설계 등 내용을 다룹니다.

      제네릭을 올바르게 사용하면 더 읽기 쉽고 유지보수 가능한 코드를 작성할 수 있다고 합니다!

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

      열거 타입(Enums)은 상수 값들의 집합을 표현하며, 각 상수는 고유한 인스턴스입니다.

      이를 활용하면 코드의 명확성과 오류 방지 능력이 크게 향상되기에 집합 안에서 안전한 연산을 제공하는 데 유용하고 연관 데이터를 추가하거나 메서드를 정의해 복잡한 동작 구현이 가능합니다!

      특히, Enum 클래스와 함께 사용하는 패턴은 가독성, 유지보수성, 그리고 타입 안정성을 높이는 데 중요한 역할을 합니다.

      표준 애너테이션(@Override, @Deprecated 등)이나 커스텀 애너테이션으로 많이 사용되는 애너테이션(Annotations)은 메타데이터를 제공하기 위한 도구로,

      컴파일러 수준의 확인, 런타임 처리, 그리고 문서화 목적으로 사용됩니다^^

      • 7장 람다와 스트림

      **람다 표현식(Lambda Expressions)**과 **스트림 API(Stream API)**는 코드의 간결성과 가독성을 크게 향상시키며,

      함수형 프로그래밍 스타일을 지원함으로써 복잡한 데이터 처리 작업을 쉽게 구현할 수 있도록 합니다.

      두가지를 사용하는데 있어서 중요한 사용법도 존재하는데요,

      먼저 람다 표현식은 익명 클래스의 간결한 대안으로, 불필요한 보일러플레이트 코드를 제거하고 함수형 인터페이스를 구현하는 직관적인 방법을 제공합니다!

      또한 **메서드 참조(Method References)**를 통해 기존 람다 표현식보다 간결하게 표현할 수 있습니다.

      스트림은 데이터 컬렉션을 처리하는 데 있어 선언적이고 효율적인 접근 방식을 제공합니다.

      필터링, 매핑, 정렬, 수집 (map, filter, reduce등 ) 의 작업을 간단히 수행할 수 있습니다.

      또한 새로운 메서드(forEach, removeIf, replaceAll 등)를 통해 기존 컬렉션 프레임워크와 자연스럽게 통합됩니다👍

      (이번 데보션영 프로젝트에서도 많이…사용했습니다 😂 )

      • 8장 메서드

      8장에서는 효과적인 메서드 설계에 대해 다루고 있습니다.

      메서드를 잘 설계하는 것이 코드의 가독성과 유지보수성을 높이는 데 얼마나 중요한지를 배울 수 있었습니다.

      이 장에서는 명확한 메서드 이름의 중요성과 함께, 이름만으로도 메서드의 역할을 파악할 수 있도록 해야 한다는 점을 강조했습니다.

      또한, 매개변수는 최소화하고, 타입이나 순서에서 혼란을 줄일 수 있도록 신경 써야 한다는 것을 알게 되었습니다.

      오버로딩을 피하고 명확한 메서드 시그니처를 사용하는 것이 중요하며, 반환 값은 유효한 값이나 Optional을 활용하여 호출자가 예외 상황을 처리할 수 있도록 도와야 한다는 점도 배웠습니다.

      방어적 복사를 통해 외부에서 객체가 변조되는 것을 방지하고, 불변 객체를 사용해 객체의 상태 변경을 최소화함으로써 코드의 안전성을 높일 수 있다는 점도 유익한 정보였습니다.

      이 장을 통해 ‘작지만 강력한 메서드 설계’가 소프트웨어 품질을 높이는 데 중요한 역할을 한다는 것을 깨달았습니다.

      • 9장 일반적인 프로그래밍 원칙

      9장에서는  가독성, 효율성, 유지보수성을 고려한 코딩의 기본 원칙을 다룹니다.

      지역변수의 범위를 최소화하고, 가독성을 높이는 for-each 문 사용을 권장한다는 것을 알게 되었습니다.

      라이브러리를 적극 활용하는 습관을 강조하고, 숫자 연산에서는 기본 타입 사용을 선호하는 것이 좋다고 합니다.

      문자열과 객체 참조는 효율성과 적절성을 고려해 설계해야 하고, 네이티브 메서드와 최적화는 꼭 필요한 경우에만 신중히 접근해야 합니다.

      • 10장 예외

      예외를 남발하지 말고 진짜 예외 상황에만 사용하라고 강조하였습니다.

      에러도 그 특성에 따라서 적절하게 써주는 게 중요한데, 복구가 가능하다면 검사 예외, 프로그래밍 오류에는 런타임 예외를 쓰도록 권장합니다.

      그리고 이때 이미 정의된 자바 표준 예외를 사용한다면 코드 가독성도 높아지고, 유지보수에도 좋다고 합니다.

      또 예외처리 같은 부분도 잘 문서화 해서, 클라이언트에서 발생할 수 있는 예외의 종류를 명확하게 하는 것이 중요합니다.

      예외를 적절히 처리할 수 있도록 하는 로직을 잘 설계해두고, 로그를 통해서 문제를 추적할 수 있도록 해야합니다.

      • 11장 동시성

      동시성은 프로그램의 성능과 확장성을 높이지만, 신중한 설계 없이는 오히려 복잡성과 오류를 초래할 수 있습니다.

      책을 통해 가변 데이터 공유 시 동기화의 중요성과 과도한 동기화의 부작용에 대해서 알아볼 수 있었습니다.

      또 더 나아가서 실행자와 태스크 중심의 설계, 동시성 유틸리티 활용, 스레드 안전성 명시, 지연 초기화 사용법 등을 소개하고 있습니다.

      스레드 스케줄러 의존의 위험성에 대해서도 언급해줘서 재미있게 읽을 수 있었습니다.

      올바른 동시성 처리를 통해 안전성과 효율성을 모두 잡을 수 있도록 하는게 중요할 것 같습니다.

      • 12장 직렬화

      자바 직렬화는 객체를 저장하거나 전송하기 편리하지만, 보안 문제와 유지보수 비용을 초래할 수 있습니다.

      이 책에서는 직렬화를 대신해서 쓸 수 있는 내용에 대해 다양하게 설명해줍니다.

      Serializable 구현의 신중한 결정, 커스텀 직렬화 설계, 보안을 위한 readObject 메서드 작성, 객체 수 제한을 위한 열거 타입 활용, 안전한 직렬화 프록시 사용을 강조합니다.

      잘못된 직렬화는 시스템을 취약하게 만드는 원인이 될 수 있어서, 대안과 방어적 설계가 필수적이라고 해요.

      직렬화를 하더라도 기술적 근거를 가지고 하는 게 중요할 것 같습니다!


      🎯 팀원 후기

      • 승연

        • 꼭 한번은 읽어보고 싶었던 책인데 스터디 형식으로 읽을 수 있어서 더 재밌게 읽을 수 있었던 것 같아요.

          혼자 읽었으면 이게 무슨 이야기인지 잘 모르고 넘어갔을 내용이 많았을 것 같은데, 같이 이야기를 나눠볼 수 있었던 게 좋았습니다.

          나중에 개발자로 일을 시작하고 나서도 한번 더, 여러번 읽어보고 싶은 책이었습니다! 나중에 꼭 다시 읽어보겠다는 저만의 목표가 생겼어요….

      • 자영

        • 말로만 들었던 이펙티브 자바를 실제로 읽어볼 수 있어서 좋았습니다.

          물론 내용이 정말 방대하고 어려워서 자바-스프링을 데보션영을 통해 입문한 저에게는 매 챕터마다 “아하, 그렇구나..” 라는 마인드로 읽게 되었습니다😂 

          그래도 데보션영 도서 스터디 그리고 열정적인 스터디원분들 덕분에 어느 정도는 반강제(?)로 읽어서 뿌듯했습니다 ,,

          챕터마다 이야기 나누는 시간도 있어서 추가로 알아가고 이해하는 부분들도 있어서 감사했어요 🤭 

          물론 완독까지는…. 못해서 ㅎㅎ 좀 더 자바에 대해서 공부하게 되면 다시 한 번 더 도전해볼 예정입니다 🔥🔥🔥

      • 경환

        • 자바 개발자에게 필수 서적이였던 이펙티브 자바를 읽어 볼 수 있었던 좋은 기회였습니다.

          물론 정말 쉽지 않아서 수학의 정석처럼 여러번 읽어야 정수를 알 수 있을 것 같습니다.. (앞으로 몇 번 더 읽어봐야겠어요 🙂)

          그래도 몇몇 부분에서는 인사이트를 얻어 실제 개발할 때 적용해서 개발하여 칭찬 받았습니다 ㅎㅎ (override 부분에서는 다양한 요소를 고려해서 적용해야한다는 걸.. 깨달았습니다 !

          데보션 영 도서 스터디를 통해서 같은 대학생 분들과 이야기하며 모르는 부분에 대해서 알아가는 과정이 좋았습니다.

          스터디 원 분들 너무 고생하셨고, 재밌고, 유익했습니다 !

      • 가현

        • 유명하지만, 어려운 책으로 망명이 높아서 혼자 읽어 볼 엄두가 나지 않았었습니다.

          하지만 함께 스터디 해서 어려운 내용도 즐겁게 읽을 수 있었고, 자주 모여서 책을 읽고 토의 했던 기억들이 새록새록 나는 것 같습니다.

          이후에도 이 책을 반복해서 읽으며 완독 🎯해보도록 해야겠어요!! 특히 깔끔한 코드, 효율적인 코드가 어떤 것인지에 대해 알아보며, 코드를 짤 때 참고해볼 수 있었습니다.

          데보션영 이후에도 스터디원 분들과 함께 다른 책에 대해서도 스터디 할 수 있는 기회가 생기면 좋겠어요 !! 😽

      • 상호

        • 어려운 책이었는데 함께 스터디해서 재미있게 읽을 수 있었던 것 같습니다.

          책을 읽고 해당 내용을 찾아 보고 정리하는 것만으로도 많은 학습을 할 수 있었어요! 스터디원분들 다들 바쁜 일상 속에서도 끝까지 잘 참여해주셔서 감사드립니다 👍🏻👍🏻

      image.png

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      쟈스틴_ 님의 최신 블로그

      더보기