본문 바로가기

Java Collections Framework ArrayList, HashMap 을 정말 셀수 없이 사용 하면서 Iterator 사용은 자신이 없고 패키지는 커서 (feat.알고리즘) 외울 자신이 없어서 공부 전에 부담이 컸다. 일단 시작 하고 나서 생긴 궁금한 점은 아래와 같다. - Itrator의 원리와 기능 - 왜 Collection 인터페이스는 Itrator를 사용하고 Map 인터페이스는 Set을 거쳐 Itrator로 순환하는지 - 왜 Map은 Collection 인터페이스를 implements 하지 않는지 먼저 Collection의 Iterator 의 사용법을 숙지 했고 Map의 Set을 거쳐 Iterator로 순환하는 방법을 코딩했다. 하다보니 enhanced for each 문도 접했으니 javascript에서 익숙한 문법이 였다. ht..
shallow & deep copy Shallow Copy : 인스턴스의 reference 복사 (window os 로 비교하면 링크 복사) Deep Copy : 인스턴스의 메모리 복사 (window os로 비교하면 파일 복사) Shallow Copy List master = new ArrayList(); master.add("1"); master.add(new Member()); List feather = master; master.add("master"); feather.add("feather"); System.out.println("reference = " + (master == feather));// true System.out.println("hashcode() = " + (master.hashCode() == feather.ha..
java equals & hashcode shallow&deep copy에 대해 테스트 코딩하면서 객체들을 비교하는데 전혀 예상치 못한 결과가 나왔다. ! ArrayList는 mutable 한 객체임에도 size가 늘어날 때마다 hashcode(메모리 주소 기반)가 변경되는 것이였다. Document를 찾아보니 아래와 같이 연산이 되고 있어 이게 무슨 상황인가 했다. int hashCode() Returns the hash code value for this list. The hash code of a list is defined to be the result of the following calculation: int hashCode = 1; for (E e : list) hashCode = 31*hashCode + (e==null ? 0 :..
java io java io 가 두려웠던 이유 * 어떤 클래스를 사용해야 할지 모르겠다. * 읽을 파일의 상대 위치 지정이 어려웠다. * 생성자에 어떤 클래스를 선언해야 할지 모르겠다. * 인스턴스 생성을 중첩으로 해서 복잡했다. * 자주 사용할 일이 없다고 생각했으나 네트웍 또한 IO 이다. BufferedReader br = new BufferedReader(new FileReader(new File("file.txt"))); java io 를 알아보니 * 생성자와 상속관계를 이해해야 한다. * byte 타입(Input/OutputStream) 과 character 타입(Reader/Writer)으로 나뉜다. * 기능의 확장/다양성을 위해 Decorator Pattern 을 사용했다. * 어느 클래스가 Decora..
Serializable Serializable의 패키지는 java.io.serializable 이다. Serializable 은 io 에 관한 기술이다. 객체 직렬화는 java 에서 빠지지 않고 나오는 개념임에도 그동안 byte 타입의 데이터로 변환하여 어디에 활용하는지, serialVersionUID 는 왜 만들어야 하는지 모르고 내부 개발 정책에 따라 serialVersionUID 를 생성해왔다. Serializable 는 자바 시스템 간의 프로토콜일 뿐 JSON의 역할과 동일함을 아래 Feature를 보고 깨닳았다. JSON 을 사용하기 위해 jackson 이나 json 라이브러리를 import해야 하는 것에 비해 Serializable은 사기에 가까울 정도로 간단하지만 제약이 큰편이다. java serailazable ..
Java 실행 구조 알고 하느냐 모르고 하느냐의 차이는 큰 것 같다.
Thread Dump Thread Dump 는 매번 난공불락의 개념이였고 - 웹문서의 Thread Dump 파일 로그를 보고 도대체 저 로그를 보고 어떻게 장애를 해결하는 것인지 이해할 수 가 없었다. 매번 알기를 미뤄뒀다. - 라이브 장애가 발생 했을 때 thread dump 를 알아보고 추출하는 것보다 catalina.out을 보고 원인파악을 해서 해결 해왔다. 안좋은 기억도 있다. 후임이 담당하는 웹서버중 한 대가 죽지도 살지도 않는 상태여서 후임이 확인 중에 있었다. 예전에 동일한 경험이 있어 좀비프로세스가 있는지 확인 하고 이를 강제 종료 후 다시 웹서버를 시작하도록 조언했고 장애는 빠르게 해결 했으나 원인은 알 수 없는 상태 였다. 이에 대해 다른 팀원이 오더니 후임에게 어떻게 해결 했는지 물어보고 왜 Thread..
객체 지향과 SOLID 객체지향을 올바르게 설계할 수 있도록 도와주는 원칙이다. 나는 객체지향 어떻게(HOW)를 도와주는 가이드라고 해석했다. SOLID가 무엇인지 검색을 통해 지식을 모아봤는데 SOLID에 대해 비슷하지만 조금씩 다른 해석들이 나왔고 습득이 되지 않았다. 역시 여러 글을 접하고 ERD를 보고서야 조금씩 이해가 됐다. SOLID를 이해하기 위해선 설명보단 ERD를 위주로 습득하고 SOLID 기반의 설계와 코딩을 해야 시야와 좋은 설계가 나올 것 같다.