전체 글

🔥해당 글은 프로젝트 팀원과 함께 프로젝트 퀄리티 및 더 나은 개발자가 되기 위하여 북 스터디를 진행하였습니다. 프로그램 초창기에는 시스템을 루틴과 하위 루틴으로 나눴다. 현재 프로그램은 가장 기본적인 단위가 함수이고, 이 장은 함수를 잘 만드는 방법을 소개한다. 작게 만들어라! 함수를 만드는 첫째 규칙은 작게, 둘째 규칙은 더 작게다. 코드의 길이가 짧을수록 이해하기 쉽다. 블록과 들여 쓰기 if문 / else 문/ while 문 등에 들어가는 블록은 한 줄이어야 된다. 대게 함수를 호출하여 처리한다. 바깥은 감싸는 함수가 작아질 뿐 아니라, 블록 안에서 호출하는 함수 이름을 적절하게 짓는다면 코드를 이해하기 쉬워진다. 즉, 중첩 구조가 생길 만큼 함수가 커져서는 안 된다. 그래야 함수를 읽고 이해하기..
🔥해당 글은 프로젝트 팀원과 함께 프로젝트 퀄리티 및 더 나은 개발자가 되기 위하여 북 스터디를 진행하였습니다. 소프트웨어에서 이름은 어디에나 쓰인다. 이 장에서는 이름을 잘 짓는 간단한 규칙을 몇 가지 소개한다. 의도를 분명히 밝혀라 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다. 그러므로, 이름을 주의 깊게 살펴 더 나은 이름이 떠오르면 개선하는 것이 좋다. 수행 기능 또는 사용 방법을 나타내기 위해 주석이 필요하다면 그건 의도를 분명히 드러내지 못했다는 말이다. 의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다. 단순히 이름만 고쳐도 함수가 하는 일을 이해하기 쉽다. 이것이 좋은 이름이 주는 위력이다. 그릇된 정보를 피하라 프로그래머는 코드에 그릇된 단..
[아이템 7] 다 쓴 객체 참조를 해제하라 메모리 관리 자바처럼 가비지 컬렉터를 갖춘 언어를 사용하면 다 쓴 객체를 알아서 회수해주기 때문에 훨씬 편해집니다. 메모리 관리에 더 이상 신경 쓰지 않아도 된다고 오해할 수 있는데, 사실이 아닙니다. 메모리 누수가 일어나는 위치는 어디인가? 다음은 스택을 간단히 구현한 코드입니다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Obje..
클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 정적 유틸리티 클래스와 싱글턴과 는 사용하지 않는 것이 좋습니다. 이 자원들을 클래스가 직접 만들게 해서도 안되며, 그 대신 필요한 자원을 생성자에 넘겨주는 것이 바람직합니다. 의존 객체 주입을 통해 클래스의 유연성, 재사용성, 테스트 용이성을 개선할 수 있습니다. 정적 유틸리티 클래스를 사용하여 구현 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} // 객체 생성 방지 public static boolean isValid(String word) { ... } public static ..
가끔 단순히 정적 메서드와 정적 필드만을 포함하는 클래스를 만들고 싶을 때가 있습니다. 이는 객체 지향적 사고 방식과는 다소 거리가 있어서 종종 부적절하게 사용되기도 하지만, 특정 상황에서는 유용하게 사용될 수 있습니다. 예를 들어, java.lang.Math나 java.util.Arrays 같은 클래스는 기본 타입 값이나 배열 관련 메서드들을 모아놓는데 사용됩니다. 또한, java.util.Collections 처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(또는 팩토리 메서드)를 모아놓을 수 있습니다. 이는 자바 8부터 인터페이스에도 가능해졌습니다. 마지막으로, 이러한 방식은 final 클래스와 관련된 메서드들을 모아놓을 때 사용될 수 있습니다. final 클래스는 상속이 불가능하므로,..
싱글턴은 오직 한 번만 인스턴스화 할 수 있는 클래스를 의미합니다. 함수나 시스템 컴포넌트와 같이 설계상 유일하게 존재해야 하는 경우에 사용됩니다. 그러나 이러한 싱글턴 클래스는 테스트하기 어렵다는 단점이 있습니다. 인터페이스를 정의하고 이를 구현하는 방식으로 싱글턴을 사용하면, 싱글턴 인스턴스를 가짜로 대체하는 것이 불가능해집니다. 싱글턴을 만드는 방식은 보통 둘 중 하나입니다. 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단ㅇ으로 public static 멤버를 하나 마련해둡니다. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } publi..
생성자와 정적 팩토리 메서드의 제약 생성자와 정적 팩토리 메서드에는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 제약이 있습니다. 점층적 생성자 패턴 각 생성자의 매개변수 개수를 다르게 만들어, 여러 개의 생성자를 만드는 방식입니다. public class NutritionFacts { private final int servingSize; // (ml, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 필수 private final int fat; // (g/1회 제공량) 필수 private final int sodium; // (mg/1회 제공량) 필수 private..
1. 스프린트 회고란? 스프린트 회고는 애자일 팀이 완료된 스프린트 수행에서의 교훈을 정리하고 아이디어를 도출하여 팀 프로세스를 개선하기 위한 활동이에요. 즉, 개인과 팀의 지속적인 개선 활동이에요. 그리고 보통 스크럼 마스터가 스프린트 회고를 리딩 해요. 2. 스프린트 회고의 중요 사항 2주 스프린트의 경우 1시간 30분 이내로 제한되어 잘한 항목, 잘못한 항목, 개선할 항목을 확인해요. 1) 목표, 회고 형식 및 특정 질문 안내 (5~10분) 스프린트 회고의 목표는 팀이 수행할 수 있는 개선, 작은 개선, 지속적인 개선을 식별하고, 팀이 수행한 방법을 계획하여 작업효율을 개선하기 위하는 데 있어요. 팀원들에게 먼저 회고 목표를 설명하는 것이 좋아요. 회고 주제 안내 : 회고를 돌아보게 될 '프로젝트'..
회고란 무엇인가? 회고란 팀이 정해진 기간동안 해왔던 일들에 대해 돌아보면서 문제점이나 잘한 점을 찾아내어 다음작업에도 좋은 점은 계승하고, 아쉬웠던 점들은 다른 방식을 시도해 끊임없이 개선을 추구하는 것이에요. 반복적이고 점차적으로 가치를 높이는(애자일) 방법이라 할 수 있어요. 즉 회고는 변화의 촉매제 역할을 하며, 팀 전체의 학습이 되며, 새로운 행동을 유발해요. 회고는 단순히 활동의 새로운 개선점을 찾는 것뿐 아니라 프로젝트에 동참한 모든 일원들이 진지하게 사안에 대해 고찰하면서 한층 훌륭한 팀이 될 수 있도록 해줘요. 평가보다는 회고 일단 평가라는 말 자체가에서 주는 위압감(?!)이 있어요. 누군가에게 평가를 받는다는 것은 누구나 긴장이 되는데, 그렇기 때문에 문제에 개선점을 찾기보다는 뭔가 내..
취업 준비 및 프로젝트를 진행하며 Git을 적극적으로 활용했습니다. 본인의 경우 초반에는 프론트앤드 지인(친구)과 함께 프로젝트를 진행하다 보니 커뮤니케이션이 너무 원활했습니다. 그렇게 진행하다 보니 협업에서는? 어떻게? 진행할까 궁금해서, 인프런에서 프로젝트 및 스터디 게시글을 올려 백앤드, 프론트앤드, 디자이너를 영입해서 진행했습니다. 프로젝트 팀장 및 백앤드를 담당하면서, 팀원과 어떻게 하면 커뮤니케이션 및 Git을 잘할 수 있을까 해서 이 글을 작성해 봤습니다. 그래서 이 글은 프로젝트 협업 관련해서 Git Pull Request를 보낼 때 매너 및 주의점에 대해 알아보겠습니다. 1. 코드 리뷰란? 코드 리뷰는 동료가 작성한 코드를 점검하고 피드백을 교환하는 과정입니다. 피드백을 교환화는 과정에서..
규니95
Gyunny