목록분류 전체보기 (277)
ecsimsw
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bUnvhM/btrcA2dSCzc/BNh7gR8YG3uslveL6FdR20/img.png)
0. '좋은 코드'을 먼저 정의하자. 성능이 우선시 되어야 하는 상황, 가독성이 우선시 되어야 하는 상황 꼼꼼한 예외처리와 테스트가 우선시 되어야하는 상황, 빠르게 구현이 먼저 필요한 상황 객체지향, 테스트 코드, 성능을 생각하다가 가독성이 떨어지는 상황을 만들고 싶진 않다. 1. 불변 객체를 만들자 객체를 신뢰할 수 있다. Thread-safe하다. 참조가 꼬이는 일이 없다. Collections.unmodifiableList 보다는 방어적 복사를 사용한다. (참조 자체를 끊는다) 2. 컨트롤러의 다이어트가 필요하다. 컨트롤러는 조립하는 역할로 생각한다. 컨트롤러에 속성를 두지 않는다. / 상태를 만들지 않는다. 컨트롤러가 더럽다면 로직을 추상화해서 관련 객체와 로직을 포함하는 도메인 객체 또는 서비스..
배열, 리스트 선택의 근거 잡기 같은 타입의 여러 객체를 단순히 참조만 하는 용도에는 배열이 좋다고 생각했다. 리스트보다 배열이 메모리 관리에 유리하다는 자료구조 책의 한 문장을 기억했지 그 이상을 알려하지 않았다. 배열과 리스트 중 어떤 것을 사용해야하는 지 선택의 근거를 나름대로 잡아보려 한다. 배열보다는 리스트를 사용하라 'Effective Java 규칙 28. 배열보다는 리스트를 사용하라'는 배열보다 리스트 사용을 권장하고 있다. 그 이유를 공부해왔다. 아래처럼 배열을 사용할 경우, ArrayStroreException을 컴파일 시점에선 알 수 없다. 배열은 공변형이고, 런타임에서야 원소의 자료형이 결정되기 때문에, 런타임에서야 그 실수가 드러난다. Object[] objArr = new Long..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ZAmIS/btqXxeUk5FM/mF2uNMtizOnkGj9sfqJGp0/img.png)
oracle docs - Collections.unmodifiableList()Returns an unmodifiable view of the specified list. This method allows modules to provide users with "read-only" access to internal lists. Query operations on the returned list "read through" to the specified list, and attempts to modify the returned list, whether direct or via its iterator, result in an UnsupportedOperationException. UnmodifiableList은..
Variable 'i' should be final or effectively final 자바에서 람다식과 inner class에서는 final 변수 또는 effectively final 변수만 접근된다. 충분히 가능할 것만 같은 코드가 왜 컴파일 에러를 만드는지, effectively final 변수는 뭔지 정리해보려고 한다. public static void testLamda(String[] args) { int i = 0; Runnable testExpression = () -> i++; } // Variable used in lambda expression should be final or effectively final 람다 캡쳐링 아래 코드를 한번 보자. class test { public s..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c1LL2Q/btqTPybmgyF/RrTmYYZCOItGigbg9a8kl1/img.png)
IP 주소가 부족하진 않을까?2018년 말 기사를 보니, 010으로 시작하는 휴대폰 번호의 80% 이상이 이미 사용되어 고갈 시를 대비하고 있다고 한다. IP주소도 비슷하다. 엄청난 양의 노드가 생겼고, 앞으로는 더 많이 생길 것이다. 그렇게 되면 IP 주소가 부족하진 않을까? 서브넷팅IPv4 주소는 네트워크 주소와 호스트 주소로 영역이 분리되어 있다. 32비트 중 일부는 네트워크 영역, 일부는 호스트 영역인 것이다. 이를 서브넷팅이라고 한다. 한 네트워크에 속하는 호스트의 개수를 줄여 라우팅 정보를 줄이기 위함이다. 다음과 같은 상황을 생각해보자. 한 택배 회사가 배송지를 분담하려고 한다. 지금까지는 '시', '구' 단위로만 택배를 처리해야 했다. 지금까지는 그렇게 불만이 없었는데, 어느 날 어떤 구가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpUADR/btqTvQJ0cws/c9isSX0IEwDB5LkDhPuIs1/img.png)
웹 사이트에 접속하는 과정구글에 접속하는 방법은 쉽다. 주소창에 https://www.google.com 만 입력하면 된다. google.com 이 ip주소가 아니라는 건 안다. 우리가 봐온 ip주소는 192.168.151.112 같은 숫자 꼴이었으니 말이다. 이런 google.com, naver.com처럼 ip 주소를 문자로 표현할 수 있도록 하는 서비스를 DNS(Domain Name System)이라고 하고 그 문자열을 도메인이라고 한다. 이번 포스팅에서는 대충 DNS 서버로부터 ip주소를 얻어 서버에 페이지 리소스를 요청하고 응답받는다는 대답 말고, 조금 더 깊게 데이터를 요청하고 응답하기까지의 과정을 TCP/IP 모델의 역할과 함께 설명하고자 한다. 1. 목적지 ip 주소 확인도메인 주소가 입..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b8fwQM/btqS4MBtAGk/yiP2XtUuECO7UmlvkWumX1/img.png)
자바는 항상 Call by Value자바 Call by value, Call by reference를 검색하면 많은 블로그에서 의견이 분분하다. Call by reference라는 블로그도 있고, 잘못된 예시로 설명하는 글도 보였다. 결론부터 말하면 자바는 Call by value이다.이번 포스팅에서는 Call by value인 이유와 헷갈릴 수 있는 예시를 메모리 구조를 그려보며 하나씩 짚어볼 생각이다. 변함과 변하지 않음컴퓨터 공학을 전공하고 C언어 수업을 들었다면 swap 예시를 꼭 한번은 봤을 것이다. 함수로 main의 a,b 값이 변하지 않는 것을 보여주면서 Call by value를, 주소를 직접 넘겨 a,b 값이 변하는 것을 보여주면서 Call by reference를 배웠다. Call b..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/byi54o/btqSNmKyd0M/a1eAR8RfAFdqqyTzCiXVx0/img.png)
복기한 해를 정리하고 나를 돌이키고자 한다. 무엇을 느꼈고 어떤 생각을 했나를 기록하고 싶다. 처음에는 독자를 위해 존댓말 썼었는데, 다른 사람을 위한 글이라는 생각에 도저히 내 이야기가 안 써졌다. 편하게 일기처럼 기록하려고 한다. 한 줄로 내 2020년을 정리하면, '배울게 많았고, 배워서 다행이다.'인 것 같다. 꼭 지식 뿐만 아니라, 마인드, 대인 관계, 경제, 글쓰기 등 참 배울게 많았던 한 해였고, 그만큼 배웠던 한 해였던 것 같다. 변화를 만들어 본 경험어렸을 때부터 말랐었다. 마른 것이 신경 쓰여 여름에도 반팔, 반바지를 입어본 적이 거의 없었다. 마른 몸을 가리려 오히려 큰 옷을 입어 왔다. 올해 운동을 하고 식습관을 바꾸면서 몸에 변화를 만들어보았다. 살을 찌우기 위한 운동이 처음이었고..