반응형
SOLID 원칙 중에서 OCP와 DIP에 대해 많이 들어봤을 것이다.OCP와 DIP를 모르는 사람을 위해 간단히 설명해보자면 OCP (Open Closed Principle) - 개방 폐쇠 원칙변경에는 닫혀 있고, 확장에는 열려 있어야 한다.즉, 확장은 가능하지만 이 확장으로 변경사항이 생겨선 안된다는 말이다.(이 내용에 대해 헷갈릴 수 있다. 아래에서 자세히 설명한다.) DIP (Dependency Inversion Principle) - 의존 역전 원칙추상화에 의존하되, 구체화에 의존해선 안된다.즉, 구현 클래스를 의존하지 말고, 추상체 (인터페이스, 추상 클래스)를 의존하라는 뜻이다. DI를 설명하기 전에 OCP와 DIP를 위반하는 상황이 뭘까?OCP와 DIP를 위반하는 경..
참고로 필자는 "엘레강스 오브젝트"라는 책을 읽어본적은 없다. 하지만 코드 리뷰를 받으면서 "생성자에 코드를 넣지 마세요" 내용을 참고해보라는 피드백을 받았던 적이 있어 알아봤었다. 이 주제를 간단히 정리하면 생성자의 역할은 오직 멤버 변수의 초기화에만 집중해야 한다는 것이 핵심이다. 우선 생성자의 역할은 뭘까 ? 생성자의 기본적인 역할은 객체를 생성하고, 객체의 초기 상태를 설정하는 것이다. 그렇다면 이 책에서는 왜 생성자에 코드를 넣지 마라고 하는 걸까? 생성자에 코드를 넣었을 때 문제점 생성자에 코드를 넣지말라는 것은 그 어떤 코드도 들어가선 안된다는 의미는 아니다. public Cars(final List cars) { validate(cars); this.cars = List.copyOf(car..
운영체제 별로 개행 문자가 다 다르다고 한다. Window \r\n Unix \n Mac \r 오래전 Mac OS의 경우에는 "\r" 개행 문자를 사용했지만 현대의 Mac OS는 Unix기반으로 "\n" 개행 문자를 사용한다고 한다. 운영체제별로 다른 개행 문자가 뭐가 문제야? Git 통해 협업 시 하나의 프로젝트를 여러 사람들이 작업할 때 다양한 운영 체제에서 개발된 코드가 저장소에 저장될 것이다. 하지만 운영체제에 종속적인 개행문자가 저장소에 올라간다면 개행문자 하나 때문에 불필요한 변경사항이 발생할 수 있고 코드를 비교해 병합하는 과정을 어렵게 만들 수도 있다. 호환성 문제 위 처럼 협업하는 상황에서 병합이 정상적으로 이뤄진 소스코드를 들고와서 추가작업을 한다고 가정했을 때 이 병합된 소스코드가 W..
final 키워드가 뭔지는 알아 근데 왜 꼭 파라미터 앞에 선언을 해야하는거야? 우아한테크코스 미션을 진행하면서 코치님과 일부 크루들의 코드에서 파라미터에 final 키워드를 항상 붙여주는 것을 보았다. final 키워드는 "값의 재할당을 막는다"는 것은 안다. 하지만 왜 꼭 파라미터 앞에 final 키워드를 붙이는 것 일까? 메서드(Method)란? 메서드는 "객체에 속한 함수"이다. 그리고 함수는 "두 변수 x, y에 대해 x의 값이 변함에 따라 y의 값이 하나씩만 정해질 때, y를 x의 함수"라고 한다. 즉, y = f(x)로 표현할 수 있다. 만약 y = 1000x 라는 함수가 있다고 해보자. 입력 (x) 결과 (y) 2 2000 4 4000 x에 입력한 값에 따라 y값이 정해지게 된다. 그런데 ..
최종 발표를 기다리면서 우아한테크코스 6기 최종 코딩테스트를 12월 16일에 치르고 12월 27일 합격 발표만을 기다리고 있었다. 최종코딩테스트도 모든 요구사항을 만족했고 새로운 추가 요구사항도 열심히 작성했고 모든 테스트도 통과할 수 있었다. 최종코딩테스트 저장소 : https://github.com/Hyeon0208/java-oncall-6-Hyeon0208 다만 아쉬운점이 있다면 테스트코드를 작성할 시간이 없었다는점과 다른 분들을 회고를 보고 깨달아버린 "(휴일)"을 붙여서 출력하는 요구사항이 평일이면서 공휴일일 경우 였는데 나는 공휴일일 경우에 "(휴일)"을 붙여서 출력한게 좀 아쉬웠다.. 😥 하지만 이를 제외한 다른 부분들은 잘했다고 생각했기 때문에 발표만을 기대하며 기다렸다.. 🙏🏻 최종 발표..