불변 클래스란 간단히 말해 그 인스턴스의 내부 값을 수정할 수 없는 클래스를 말한다. 불변 클래스로 생성된 인스턴스는 생성자로 인해 객체가 생성된 이후부터 객체가 가비지 컬렉터에 의해서 해제될 때까지 절대 변하지 않는다. 우리는 이미 다양한 불변 클래스를 사용하고 있고 그 대표적인 예로 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 이 무엇..
Object 클래스는 객체를 만들 수 있는 구체 클래스면서 중요한 특징으로 모든 클래스의 부모 클래스라는 점이 있다는 것을 기억해야 한다. Object 클래스에는 equals, hashCode, toString, clone 등 몇 가지 메서드가 포함되어 있는데 이러한 메서드들은 모두 재정의를 염두에 두고 제작된 메서드이다. 따라서 이러한 메서드들을 재정의할 때 지켜야 하는 일반 규약들이 명확하게 정의되어 있다. 이러한 일반규약은 당연히 지켜진다고 가정되기 때문에 지키지 않았을 때 HashSet, HashMap과 같은 것에서 오동작을 발생시킬 수 있다. 이번 포스팅에서는 Object 클래스에 포함되어 있는 equals, hashCode, toString, clone 을 재정의할 때 지켜야할 일반규약에 대해..