전체 글

[아이템 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. 코드 리뷰란? 코드 리뷰는 동료가 작성한 코드를 점검하고 피드백을 교환하는 과정입니다. 피드백을 교환화는 과정에서..
젠킨스란? 젠킨스는 오픈 소스 자동화 도구로, 지속적인 통합(CI)과 지속적인 배포(CD)를 지원합니다. 이를 통해 소프트웨어 개발 프로세스를 자동화하고, 빌드, 테스트 및 배포 등의 작업을 지속적으로 수행할 수 있습니다. 젠킨스는 빌드 및 테스트 프로세스를 자동화하고, 소스 코드 변경이 발생할 때마다 빌드 및 테스트 수행하고 이를 자동으로 통합합니다. 젠킨스의 동작 원리 소스 코드 변경 감지 젠킨스는 버전 관리 시스템(Git, SVN 등)과 연동하여, 소스 코드 변경을 감지합니다. 빌드 소스 코드 변경이 감지되면, 빌드를 수행합니다. 이때, 빌드 스크립트를 이용하면 소스 코드를 컴파일하고, 실행 가능한 형태로 변환합니다. 테스트 빌드가 완료되면, 테스트를 수행합니다. 이때, 자동화된 테스트를 수행하거나..
🔥해당 글은 프로젝트 팀원과 함께 프로젝트 퀄리티 및 더 나은 개발자가 되기 위하여 북 스터디를 진행하였습니다. 클린 코드를 읽고 나면 다음과 같은 사실을 배우게 될 것입니다. 좋은 코드와 나쁜 코드를 구분하는 능력을 갖춘다. 좋은 코드를 작성하는 방법을 익힌다. 나쁜 코드를 좋은 코드로 바꾸는 실력도 쌓는다. 코드가 존재하리라 실제로도 코드의 종말이 코앞에 닥쳤다고 주장하는 사람이 없지 않습니다. 코드를 자동으로 생성하는 시대가 다가온다고 하네요..? 그때가 되면 프로그래머는 필요가 없습니다. 영업 직원이 명세에서 프로그램을 자동으로 생성하면 되니까요.. 하지만..! 앞으로 코드가 사라질 가망은 전혀 없습니다. 왜냐하면 코드는 요구사항을 상세히 표현하는 수단이기 때문입니다. 어느 수준에 이르면 코드의 ..
규니95
Gyunny