알다시피 상속은 코드 재사용을 구현하기 위한 강력한 방법이다. 하지만 잘못 사용할 경우 오류를 내기 쉬운 프로그램을 만들게 된다. 이러한 문제는 상위 클래스와 하위 클래스를 동일한 개발자가 개발하지 않은 경우에 발생하게 된다. 따라서 다른 클라이언트가 내가 만든 클래스를 상속받을 수 있게 하려면 주의해야 한다. 상속은 코드 재사용성을 높여주지만 캡슐화를 깨뜨리게 된다. 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있다는 말이다. (상위 클래스가 변경되는 등의 변화로 인해서!!) 따라서 상위 클래스 개발자가 상속을 고려한 문서화를 하거나 상속하려는 클라이언트가 상위 클래스의 변화에 맞춰 하위 클래스를 수정해줘야 한다. public class InstrumentedHashSe..
불변 클래스란 간단히 말해 그 인스턴스의 내부 값을 수정할 수 없는 클래스를 말한다. 불변 클래스로 생성된 인스턴스는 생성자로 인해 객체가 생성된 이후부터 객체가 가비지 컬렉터에 의해서 해제될 때까지 절대 변하지 않는다. 우리는 이미 다양한 불변 클래스를 사용하고 있고 그 대표적인 예로 String, BigInteger, Boolean 등이 존재한다. 불변 클래스의 가장 큰 장점은 설계하고 구현하기 쉬우며 오류가 생길 여지가 적고 훨씬 안전하다는 점이다. 그러면 불변 클래스를 만들기 위한 규칙에 대해서 살펴보자. 객체의 상태를 변경하는 메서드(Ex. Setter 메서드)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 즉 해당 클래스를 상속받을 수 없도록 만들어야 한다. 모든 인스턴스 필드를 fin..
어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽하게 숨겨, 구현과 API 를 깔끔하게 분리한다. 이러한 개념은 OOP 의 원칙 중 하나인 캡슐화, 정보 은닉을 지키기 위한 것이다. 그러면 이러한 정보 은닉을 구현함으로써 얻을 수 있는 장점들에 대해서 살펴보자. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 빨리 파악해서 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담도 적기 때문이다. 정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 준다. 소프트웨어 재사용성을 높인다. ..
Configure Service? 최근에 많이 사용되는 MSA(Micro Service Architecture)는 여러 개의 서비스를 분산 시스템으로 구성한다. 이러한 분산 시스템에서 Server/Client 구성에 필요한 application.yml 파일과 같은 설정정보를 외부 시스템에서 관리해주는 서비스를 말한다. 이러한 Configure Service 는 실제 설정파일이 저장되는 저장소가 별도로 존재하고 이러한 저장소를 Configure Service 와 연결하게 된다. 따라서 설정파일이 저장되는 저장소를 어떤 것으로 할지도 결정해야 한다. 그리고 Configure Service 를 구성할 때 고려해야되는 부분중 하나는 설정 값이 변경되었을 때의 동작이다. 서버 재기동 (최악의 방법이다) Actua..
https://ch4njun.tistory.com/242 [Git] Git 좀 세울줄 아는 남자-1 이번에 인턴을 진행하게된 곳에서 Git 에 대한 교육을 받게 됐는데 해당 교육에서 정말 많은 것을 배울 수 있어 블로그에 정리해보려 한다. 또, 내가 그동안 사용했던 Git 은 그저 백업의 목적만을 ch4njun.tistory.com 이번 포스팅에서는 첫 번째 포스팅에 이어서 Git Branching Model 에 대해서 설명하려고 한다. 기본적으로 Git 에 존재하는 명령어는 안다는 전제하에 포스팅을 작성할 것이기 때문에 반드시 첫 번째 포스팅부터 보는 것을 추천한다. Git Branching Model 우선 늘 그렇듯이 왜 Git Branching Model 이 왜 필요한지에 대해서 이야기해보자. Gi..
이번에 인턴을 진행하게된 곳에서 Git 에 대한 교육을 받게 됐는데 해당 교육에서 정말 많은 것을 배울 수 있어 블로그에 정리해보려 한다. 또, 내가 그동안 사용했던 Git 은 그저 백업의 목적만을 위한 것이였으며 구글 클라우드랑 다를바가 없었다는 것을 깨닫게 되었다. 이번 강의는 두 가지 포스팅을 통해서 정리할 것이며 첫 번째 포스팅에서는 Git 에 대한 간단한 설명과 왜 사용하는지, 그리고 Git 에 존재하는 여러가지 명령어들에 대해서 설명하려고 한다. 물론, 많은 사람들이 아는 기본적인 내용이겠지만 나한테는 정말 유익했고 꼭 다시한번 상기시키고 싶어서 정리를 하게되었다. VCS(Version Control System) 자세한 내용에 들어가기에 앞서 Version Control System 이 무엇..