개발 공부 기록하기 108

짧은 코멘트와 함께하는 이펙티브 자바) #18 상속보다는 컴포지션을 사용하라

짧은코멘트 회사 블로그에 기고한 글에서도 살짝 이야기 했지만 상속보다는 합성을 사용하는 것이 훨씬 수월하다. 합성에 익숙해지면 어느덧 extends 보다 implements를 선호하게 될 것이다. 상속보다는 합성을 사용하라 일반적인 구체 클래스를 패키지 경계를 넘어 상속하는 일은 위험하다. 메소드 호출과 달리 상속은 캡슐화를 깨뜨린다. 상위 메소드를 부를때 자기 사용 여부에 따라 의도와 다르게 동작할 수 있다. (자기 사용 : 한 클래스의 퍼블릭 인터페이스에서 같은 클래스 내 다른 퍼블릭 인터페이스를 사용하여 기능을 완성한 것) 또한, 상위 클래스의 한 메소드가 상위 클래스의 다른 메소드를 사용하는 자기 사용 여부는 내부 구현 방식에 해당되기 때문에 다음 릴리스에서 유지될지 알 수 없다. 다음 릴리스에서..

AWS Auto Scaling 구축하기

안녕하세요! 여러분 공부하는~개발자입니다 ^^ 이번 시리즈에서는 EC2 AutoScaling 구축을 해보려고 합니다. AWS를 사용하는 많은 운영 환경에서는 하나의 EC2 인스턴스가 아닌 여러 인스턴스를 사용하는데요, 트래픽이 갑작스럽게 몰리거나 특정 시간에 많은 인스턴스가 필요한 경우에 자동으로 대응하기 위해서입니다. 사람이 24시간 수동으로 대응할 수는 없으니까요!! 자 그럼, 이번 시리즈에서는 EC2 Auto Scaling 그룹을 만들어 간단한 Nginx + WAS만을 두고, 해당 WAS에 트래픽을 높여 새로운 인스턴스가 자동으로 생긴 후 트래픽이 분산되는지 테스트 해보도록 하겠습니다 ㅎㅎ 이번 포스팅에서는 우선 Auto Scaling 그룹을 만들어 CPU 사용량에 따라 자동 scale out이 되..

짧은 코멘트와 함께하는 이펙티브 자바) #17 변경 가능성을 최소화하라 (불변객체)

짧은코멘트 아래에 언급된 장점들로 인해 불변 객체는 정말 자주 사용되며 final 키워드에 대해서는 잘 알아두면 좋다. class나 method에서도 간혹 사용할 일이 있기 때문이다. 불변 객체의 연산을 예측하는 것 뿐만 아니라 객체 생성이 제한적이라면 내부에 캐싱해두는 것도 성능상 괜찮은 방법이다. 특히 Enum은 자연스럽게 불변 객체가 되는데 name이나 특정 key를 사용해 Enum 찾을 일이 많다면 캐싱이 권장된다. 변경 가능성을 최소화하라 불변 클래스란 그 인스턴스의 내부 값을 수정할 수 없는 클래스이다. 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전하다. 불변 클래스는 다섯 가지 규칙을 따라야 한다. 객체의 상태를 변경하는 메소드를 제공하..

짧은 코멘트와 함께하는 이펙티브 자바) #16 public 클래스에서는 public 필드가 아닌 접근자 메소드를 사용하라

짧은 코멘트 Effective JAVA에서 가장 짧은 파트가 아닌가 싶다 ㅎㅎ public 클래스에서는 public 필드가 아닌 접근자 메소드를 사용하라 패키지 바깥에서 접근할 수 있는 클래스라면 접근자를 제공해라 package-private 클래스 혹은 private 중첩 클래스라면 데이터 필드를 노출한다 해도 하등의 문제가 없다.

짧은 코멘트와 함께하는 이펙티브 자바) #15 클래스와 멤버의 접근 권한을 최소화하라

짧은 코멘트 클래스와 메소드, 그리고 필드의 접근 권한을 적절히 설정하는 일은 단순히 접근할 수 있다 / 없다 뿐 아니라, 코드를 읽는 사람 입장에서, '이 필드는 밖에서도 사용되나?' / '이 코드는 내부에서만 사용되구나'를 유추할 수 있게 해주는 수단이다. 때문에 clean code에 있어 기초적이면서도 중요하다고 생각한다. 가끔 단위 테스트를 작성하기 위해 private method를 public method로 만드는 분들이 계시는데, 그 보다 나은 방법은 default 접근 권한을 사용하는 것이다. 그리고 그 보다 조금 더 나은 방법은 테스트 해야할 부분과 테스트를 해야하지 않을 부분을 명확히 구분하여 외부로 하여금 내부를 테스트 하게 하는 것이다. (lannstark.tistory.com/105..

[공유] 유용한 테스트 케이스를 위한 개발자의 자세

https://meetup.toast.com/posts/246 유용한 테스트 케이스를 위한 개발자의 자세 : TOAST Meetup 각종 커뮤니티에 주기적으로 등장하는 "private 메서드를 테스트하려면 어떻게 하나요?" 혹은 "private 메서드를 테스트해야 하나요?"와 같은 질문을 보면서 언젠가는 관련해서 정리해봐야겠다고 생 meetup.toast.com 위 글을 읽으며, 다시 한 번 생각해볼만한 문구를 나름대로 정리! 좋은 글 감사합니다 🙇 무조건 TC를 작성한다고 도움이 되는 것이 아니다. TC는 적을 수록 좋다. 최소의 TC로 최대의 효과를 낼수록, 즉 효율이 높을수록 테스트의 가치는 더 뚜렷해진다. 반대의 경우라면 수많은 TC가 프로젝트의 민첩성을 떨어트리고 사사건건 발목을 잡을 것이다. ..

짧은 코멘트와 함께하는 이펙티브 자바) #14 Comparable을 구현할지 고려하라

짧은 코멘트 Comparable을 생각보다 종종 구현을 하게 된다. 안타깝게 항상 헷갈리는 부분이 있는데 결과가 음수 혹은 양수일때 어떤 것이 앞에 가느냐... 이다 이럴때 해당 객체에 대한 단위 테스트를 깔끔하게 작성해주면 정말 좋다 👍 Comparable을 구현할지 고려하라 compareTo는 Object equals와 유사하다. 다른 점이라곤, compareTo는 단순 동치성 비교에 더해 순서까지 비교할 수 있으며 제네릭 한 것과 Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻하는 것이다. Comparable을 구현하면 검색, 극단값 계산, 자동 정렬되는 컬렉션 관리도 쉽게 할 수 있다. 자바 플랫폼 라이브러리의 모든 값 클래스와 열거타입은 Comparab..

ulimit에 대해 알아보자

안녕하세요 여러분! 공부하는 개발자입니다 😉 오늘은 linux에서 사용하는 ulimit 명령어에 대해 알아보려고 합니다! 사용 OS : Amazon Linux 2 (RHEL) 사용 머신 : t2.medium 1. ulimit이란? ulimit 명령어의 man 페이지를 보면 다음과 같이 나와 있습니다. Provides control over the resources available to the shell and to processes started by it, on systems that allow such control. 해석을 해보자면, "우리가 접속하는 shell이나 실행시키는 프로세스가 사용할 수 있는 머신의 자원의 조절을 제공한다"라는 뜻입니다. 예를 들어, 우리가 실행시키고 있는 프로세스에서 ..

짧은 코멘트와 함께하는 이펙티브 자바) #13 clone 재정의는 주의해서 진행하라

짧은 코멘트 Cloneable을 실제로 구현해본 적은 없는 듯 하다. 백엔드 개발자로써 특정 객체에 복제를 해야할 일이 드물기 때문이다. 얕은 복사(shallow copy)와 깊은 복사(deep copy) 차이는 알아두는 것이 좋다. 얕은 복사는 객체 내부에 있는 참조 객체가 복제되지 않는 것이고, 깊은 복사는 객체 내부에 있는 참조 객체까지 복제되는 것이다. clone 재정의는 주의해서 징행하라 Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스이다. 믹스인 : 클래스가 구현할 수 있는 타입. 믹스인이라 부르는 이유는 실제 클래스가 가지고 있는 주된 기능에 특정 타입을 구현함으로써 선택적인 기능을 혼합하기 때문이다 예시) public interface Comparable { ..

짧은 코멘트와 함께하는 이펙티브 자바) #12 toString을 항상 재정의하라

짧은 코멘트 lombok의 @ToString을 사용하면 Object의 toString을 쉽게 재정의할 수 있다. 모든 객체에 @ToString을 붙일 필요는 없지만, DTO에 붙이는 것은 디버깅시 꽤 유용했던 경험이 많다. toString을 항상 재정의 하라 Object 클래스의 기본 메소드 toString은 클래스이름@해시코드를 반환한다. 때문에 모든 클래스의 toString은 항상 재정의 하는 것이 좋다. 심지어 Object 클래스의 tostring의 규약은 “모든 하위 클래스에서 이 메소드를 재정의하라”이기도 하다. toString은 그 객체가 가진 주요 정보 모두를 반환하는 게 좋다. 또한 toString을 작성할 때 의도를 명확히 밝혀야 한다. 포맷 명시 toString을 구현할 때면 반환값의 ..