주제 Effective Java 스터디에서 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라는 주제에 관해 얘기하던 중 다음과 같은 질문이 나오게 되었습니다. private static final Thing[] PRIVATE_VALUES = { ... }; public static final Thing[] values() { return PRIVATE_VALUES.clone(); } 원본 배열의 불변성을 지키기 위해 방어적 복사를 사용하여 복사 배열을 반환하는 메서드를 생성하였는데 배열 원소 내부의 값을 조작하게 되면 원본 배열의 불변성이 깨지지 않을까요? clone 메서드를 사용하게 되면 새로운 메모리 공간에 값을 복사하게 되지만, 원소가 기본 타입이 아닌 참조 타입이기에 해당 주소값도 동일하게 복..
깔끔하고 일관적이고 꼼꼼하고 감탄하고 탄복하고 놀라게 만드는 코드를 작성하고 싶습니다. 프로그래머라면 프로그래머가 되고 싶다면 코드를 작성하는 규칙을 정하고 규칙을 착실하게 따라야 합니다. 그러기 위해서는 규칙을 정하는 것이 필요하고 규칙을 정하는 것에도 많은 시간을 투자해야 합니다. 위의 사진은 실제로 저희 개발팀이 팀 단위 프로젝트를 시작하기 전 지켜야 할 규칙과 설명을 정리해둔 노션 페이지입니다. 규칙을 잘 정리해두었기에 프로젝트를 진행하면서 방향을 잃지 않고 성공적으로 프로젝트를 마무리할 수 있었다고 생각합니다. 코드 형식은 매우 중요하고 의사소통의 일환입니다. 기존 코드가 변경되어 사라질 수는 있어도 코드 형식과 규율은 사라지지 않습니다. 이번 장을 통해 원활한 소통을 장려하는 코드 형식을 알아..
코드를 작성할 때 항상 주석에 대해 고민하곤 합니다. 프로그램 코드가 잘 짜여 있다면 주석이 필요하지 않다고 생각하고 있기 때문입니다. 이번 장을 읽으면서 항상 고민이었던 주석에 대해 깊게 알아가고자 합니다. 잘 작성된 주석은 어느 정보보다 유용합니다. 하지만 때로는 실패를 만회하기 위해 주석을 사용합니다. 필자는 주석을 사용했을 때 실패를 의미한다고 말하고 있습니다. 주석은 시간이 지날수록 필요 없는 정보가 되어갑니다. 코드는 언제나 변화에 열려있고, 계속해서 변화는 발생합니다. 하지만 주석까지 프로그래머가 유지보수하기에는 현실적으로 불가능합니다. 그 시간에 조금 더 좋은 코드를 위한 생각에 투자하는 것이 현명합니다. 진실은 코드에만 존재합니다. 우리는 주석을 가능한 줄이도록 꾸준히 노력해야 합니다. ..
어떤 프로그램이든 가장 기본적인 단위는 함수입니다. 이번 장에서는 함수를 만드는 법을 소개하고 있습니다. 작게 만들어라! 장황한 함수보다는 작고 간결하고 명확한 함수가 좋은 것은 모두가 알고 있는 사실입니다. 작은 함수는 어떻게 만들 수 있을까요? 블록과 들여쓰기를 활용합니다. if/else 문, while 문 등에 들어가는 블록에는 적절한 이름을 가진 함수를 배치하여 한 줄로 생성하도록 합니다. 중첩 구조가 생길수록 함수가 커지기 때문에 들여쓰기 수준도 1단에서 2단을 넘어서면 안 됩니다. 그래야만 이해하기 쉽고 가독성 높은 함수를 생성할 수 있습니다. for 문 안에서 발생하는 동작을 하나의 함수로 바꿔보도록 하겠습니다. 다음과 같이 바꾸게 되었더니 함수 자체도 간결해지고 역할도 명확해졌음을 느끼게 ..
Service Discovery Microservice Architecture에서 각각의 서비스들은 마이크로서비스로 분리되어 있고 IP와 Port로 구분할 수 있습니다. 클라이언트의 요청에 알맞은 서비스를 제공하기 위해 구분된 서비스 정보들을 저장하고 관리하는 관리자 역할을 Service Discovery가 수행합니다. Spring Cloud Netflix 넷플릭스는 MSA로의 전환을 통해 많은 경험을 가지게 되었는데 이 경험을 OSS(Open Source Software)로 공개했습니다. 클라우드 환경에 특화된 프레임워크인 Spring Cloud에도 많은 넷플릭스 OSS가 통합되어 있는데 그 중 Spring Cloud Netflix Eureka에 대해서 알아보고자 합니다. Spring Cloud Net..