Spring을 공부하면서 핵심 개념인 DI에 대해 좀 더 자세히 알아볼 필요를 느껴 이번 포스트를 작성했습니다.이번 포스트에서는 자세한 구현보다는, 각 방법의 특징을 주로 살펴보려고 합니다. DI의 종류DI의 방법은 Constructor DI, Setter DI, Field DI 이렇게 3가지 입니다. Spring 공식문서에서는 Field DI, Setter DI 보다는 Constructor DI를 권장하고 있습니다. ( Spring 공식 문서 : Constructor vs Setter ) Constructor DI : 생성자 주입특징첫 번째, Spring에 대한 의존도가 낮습니다. 생성자 주입은 DI Container의 도움 없이 생성자를 통해 의존성을 직접 주입할 수 있습니다. 즉 의존성 주입에 Sp..
개념final 키워드는 변경 불가능, 즉 불변성(immutability)을 나타내는 키워드입니다. final 키워드가 적용된 [ 변수, 메서드, 클래스 ]는 반드시 초기화되어야 하며, 이후에는 값을 변경할 수 없습니다. 따라서 Null을 방지하고, 중간에 실수로 값이 변경하는 일이 불가능하기 때문에 안전성이 증가합니다. 주의점Java에서 final 키워드가 적용된 필드는 선언과 동시에 초기화 하거나, 생성자에서 초기화해야 합니다. 그렇지 않으면 컴파일러가 미리 에러( might not have been initialize )를 발생시킵니다. Spring DI와의 관계오직 생성자 DI(Constructor DI)만이 final 키워드를 사용할 수 있습니다. 그 이유는 주의점에서 말한 것처럼, final은 ..
2부에서 이어지는 포스트입니다. 실수계산 오차와 부동소수점 ( feat. IEEE 754 표준 ) 2부1부 에서 이어지는 포스트입니다. 실수계산 오차와 부동소수점 ( feat. IEEE 754 표준 ) 1부영어 공부겸 Medium의 개발 블로그를 탐방하던 도중에 이런 포스트를 찾았습니다.그리고 최근 개발 커뮤니티forrest-code-13.tistory.com 이번 포스트에서는 나머지 궁금증을 해결해보도록 하겠습니다. BigDecimal 클래스이전 포스트에서 설명했듯이, 컴퓨터가 실수를 이진수로 변환하는 과정에서 발생하는 무한소수로 인해 오차가 발생합니다. 이런 이진수 변환에 의한 오차를 막기위해 사용되는 클래스가 BigDecimal 클래스입니다. BigDecimal 내부구현BigDecimal 클래스는..
1부 에서 이어지는 포스트입니다. 실수계산 오차와 부동소수점 ( feat. IEEE 754 표준 ) 1부영어 공부겸 Medium의 개발 블로그를 탐방하던 도중에 이런 포스트를 찾았습니다.그리고 최근 개발 커뮤니티의 cs 질문 게시판에서 비슷한 주제의 질문이 보였습니다." 이 코드는 왜 false가 나올까forrest-code-13.tistory.com 1부에서 컴퓨터가 실수의 소수부를 이진수로 변환해서 저장한다고 했습니다. 이번 포스트에서는 변환된 이진수를 컴퓨터가 물리적으로 어떻게 저장하지에 대해 알아보도록 하겠습니다. 부동소수점실제로 컴퓨터에서 소수부가 있는 이진수를 저장할 때는 부동소수점(Floating Point)이라는 방법을 사용해 한번 더 변환을 거쳐서 저장합니다. 부동소수점은 Floatin..
URI, URL, URN... 항상 너무 헷갈려 그냥 두리뭉실 넘어가던 개념들이었습니다.근데 정말 한 줄기 빛과 같은 설명 영상을 찾아 감격에 겨워 이번 포스트를 작성합니다. URIUniform : 일정한 규칙을 따르는Resource : 자원Identifier : 식별자 직역하면 " 특정 자원을 식별하기 위해 사용하는 것 "입니다. 하지만 보통은 " 인터넷상의 자원을 식별하기 위해 그 자원의 위치나 자원의 이름 혹은 둘 모두를 사용하는 문자열 " 란 뜻으로 사용됩니다. 비유이름 : 김아무개똥주소 : 대한민국 서울시 아무동 개똥아파트 102동 208호우리는 이름을 불러서 사람을 특정할 수도 있고, 주소를 통해 사람을 찾아갈 수도 있습니다.혹은 주소로 찾아가 이름을 부르면서 사람을 찾을 수도 있겠죠. URI..
Backend 취업을 준비하며 수 많은 공고에서 항상 보이는 말 REST API... 널리 알려진 뜻은 다음과 같습니다.네트워크에서 통신을 구성할 때 이런 구조로 설계하라는 지침을 지키는 APIURI를 통해 자원(Resource)을 명시하고, Method(POST, GET.. 등등)를 통해 해당 자원에 대한 CRUD를 적용하는 API대부분의 자료에서 REST의 뜻에 대한 설명보다는 REST라는 지침을 어떻게 지키는지에 대해서만 중점적으로 다루고 있었습니다. 이런 자료를 볼 때마다 저는 "왜 이렇게 이름을 붙였지?" 라는 의문이 있었습니다. 그래서 이번 기회에 REST란 이름의 의미를 제대로 공부해보고자 합니다. REST의 탄생 배경먼저 REST의 탄생 배경부터 알아보겠습니다. 때는 2000년, HTTP가..
영어 공부겸 Medium의 개발 블로그를 탐방하던 도중에 이런 포스트를 찾았습니다. 그리고 최근 개발 커뮤니티의 cs 질문 게시판에서 비슷한 주제의 질문이 보였습니다." 이 코드는 왜 false가 나올까요? "console.log(0.1 + 0.2 === 0.3); 먼저 떠오른 대답은 "컴퓨터는 실수를 정확하게 저장할 수 없다." 였습니다. 하지만 이어지는 "그럼 왜 정확히 저장할 수 없나요?"라는 질문에는 정확히 대답을 할 수 없었습니다. 그래서 이렇게 된 김에 제대로 공부해보려고 합니다. 사전지식. 컴퓨터에 저장되는 실수의 형태컴퓨터는 모든 데이터를 bit를 사용해 2진수의 형태로 저장합니다. 따라서 실수를 저장할 때도 다음 예시처럼 2진수로 바꿔서 저장합니다. 컴퓨터가 실수를 "정확하게" 표현할..
기본적인 개념좋은 설계를 위한 객채 지향 원칙 묶음이다. 그저 원칙이기 때문에 OOP(객체 지향 프로그래밍)을 지원하는 모든 언어에 원칙을 적용 가능하다. 각 원칙은 따로 적용해야 하는 순서는 없고, 서로 다른 문제를 해결하기 위해 만든 원칙이기 때문에 문제가 없다면 원칙을 억지로 적용할 이유도 없다.좋은 설계란?코드를 확장하고, 유지보수 관리하기 쉬운 구조복잡성을 제거해 가독성이 좋고, 리팩토링이 쉬운 구조그럼으로, 새로운 요구사항이나 변경사항이 있을 때 영향을 받는 범위가 적고, 개발 생산성이 높은 구조(좋은 설계란 이야기할 거리가 많은 주제입니다. 위 내용을 좋은 설계에 대한 개인적인 의견으로 받아들여 주시면 감사하겠습니다.)SRP (Single Responsibility Principle) - 단..