전체글 236

짧은 코멘트와 함께하는 이펙티브 자바) #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 찾을 일이 많다면 캐싱이 권장된다. 변경 가능성을 최소화하라 불변 클래스란 그 인스턴스의 내부 값을 수정할 수 없는 클래스이다. 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전하다. 불변 클래스는 다섯 가지 규칙을 따라야 한다. 객체의 상태를 변경하는 메소드를 제공하..

[짧은 서평] 정부가 집 값을 안 잡는 이유

완독일 : 2020-10-09 / 평점 : 5.0 노션에 비개발서적 독서 목록을 기록해 오기 시작한 2020년 6월 17일부터 총 23권의 책을 읽었는데, 평점이 5.0을 달성한 책은 딱 2권 있었다. 이번에 세 번째 완독했던 그리고 이번에 읽은 내가 정말 좋아하는 사람이라면 이렇게 말해 줄 것이다. "야 이 책 꼭 봐라. 인터넷에 퍼져 있는거 있으니 돈 아끼기 위해 그거 읽어도 되니까 제발 읽어라. 안 그러면 니 10년후에 월급의 60%를 월세에 쓸 수도 있다. 이 상황을 타파할 해결책을 주는 것은 아니지만 이 상황을 정면으로 볼 수 있게 해준다. 일단 알아야 머리를 굴려서 생존하지 않겠냐" 내가 좋아하지 않는 사람이라면 이렇게 말해 줄 것이다. "그 책 안봐도 되요 ^^ 집 값 꼭 잡힐거에요 ^^"

짧은 코멘트와 함께하는 이펙티브 자바) #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가 프로젝트의 민첩성을 떨어트리고 사사건건 발목을 잡을 것이다. ..

[짧은 서평] 투자를 어떻게 할 것인가 (단도투자)

완독일 : 2020-10-01 / 평점 : 4.7 크으.. 좋은 책이다. 개인적으로 리스펙하는 수십억대 투자자 한 분은 이런 명언을 날리셨다. '거기서 2배 오를 수 있을 것 같냐?' 그 함의와 일맥상통하는 책 단도 투자의 9가지 원칙 새로운 사업 보다 기존 사업에 투자하라 단순하게 이해할 수 있는 사업에 투자하라 오랜 기간에 걸쳐 극도로 서서히 변화하는 단순한 사업에 투자해야 한다 침체된 업종의 침체된 사업에 투자하라 적당한 가겨에 팔더라도 좋은 결과를 얻을 수 있는 매력적인 가격에 사라 (워런 버핏) 아무도 선호하지 않고 모두가 기피할 때가 그 사업을 인수하기에 가장 좋은 시기이다 견고한 경쟁우위, 해자를 갖춘 사업에 투자하라 경쟁자들이 쉽게 공략할 수 있는 사업은 좋아하지 않는다. 저는 해자에 둘러..

짧은 코멘트와 함께하는 이펙티브 자바) #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이나 실행시키는 프로세스가 사용할 수 있는 머신의 자원의 조절을 제공한다"라는 뜻입니다. 예를 들어, 우리가 실행시키고 있는 프로세스에서 ..