Coding Note
자료 구조 선택 가이드
자료 구조 선택 가이드
2018.12.20Java에서 `` Vector``는 `` ArrayList``다. `` Vector``가 있기는 하지만 사용할 필요가 없다. `` Vector``와 `` ArrayList``의 차이점은 동기화 처리에 있는데, `` Vector``는 무조건 동기화이기 때문에 단일 쓰레드에서 성능이 떨어지며 멀티 스레드 모델에서도 Collection, Map, synchronizedCollection, synchronizedList을 쓰는게 더 낫기 때문이다. deque? (발음은 deck) 양쪽에서 삽입/삭제가 가능한 원통형 구조를 생각하면 됨. C++에서 vector와 map 키-벨류 구조이긴 한데 컨테이너의 사이즈가 작아서 둘 중 뭘쓸까 애매한 경우가 있다. vector를 사용하는 경우라면, obj의 어떤 항목을 ke..
직렬화, Serialization
직렬화, Serialization
2017.12.01어떤 언어를 사용하든 변수에 담기는 데이터는 크게 Value와 Address 두 가지로 구분할 수 있다.포인터, 객체 변수 등등은 변수 자체에 담기는 데이터가 Address다.문제는 객체를 저장/전송하려고 할 때 발생하는데, 객체 변수에 들어있는 Address를 저장/전송한다면 받는 측에서 그 Address를 참조해봐도 아무런 데이터가 없기 때문에 전혀 의미가 없다. 그래서 레퍼런스를 따라가서 실제로 의미있는 데이터인 Value를 저장하는 작업이 직렬화, Serialization이다.직렬화 결과 데이터 형식은 선택에 따라 Binary일 수도, JSON, CSV일 수도 있다. 그래서 그냥 포인터로 따라가서 직접 저장하는 방식으로도 구현할 수 있겠지만 객체 내부에서 또 다른 객체 변수가 있다던지, 클래스 내..
함수형 프로그래밍 (Functional Programming)
함수형 프로그래밍 (Functional Programming)
2017.11.10이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
소켓 프로그래밍 관련 ( Socket programming )
소켓 프로그래밍 관련 ( Socket programming )
2017.08.252016/09/20 - [Network] - TCP { TIME_WAIT }실험적, 경험적으로 판단한 내용이라 항상 이렇게 동작함을 보장하지는 않는다. ```client → output_buf → ~network~ → input_buf → recv └─────── not app layer ───────┘```TCP socket에서, socket 사이에 주고받는 데이터의 단위는 TCP segment다.client에서 `` send(str)`` 시 `` str``이 하나의 TCP segment에 들어가 전송된다.server에서 `` recv()``는 다음과 같이 동작한다.buffer에 데이터가 있는 경우 buffer에 있는 데이터를 모두 또는 지정된 크기만큼 가져오면서 blocking을 해제하고 다음 코드를..
상속, 인터페이스, 트레이트 차이점과 어떨 때 사용하나.
상속, 인터페이스, 트레이트 차이점과 어떨 때 사용하나.
2017.06.30상속, 인터페이스, 트레이트의 차이상속과 나머지 두 관계의 가장 큰 차이점은, 인터페이스와 트레이트는 기능 단위라는 것이다.그래서 클래스 사이에 연관 관계가 없어도 기능 단위의 공통점을 가지도록 할 수 있다. abstract추상 클래스를 사용하려면 ``java extends``를 사용해야 하므로, 상속 계층에 연결된다.추상 클래스는 반드시 하나 이상의 추상 메소드를 포함해야 한다. 추상 메소드는 하위 클래스에서 반드시 재정의되어야 한다. interface와 달리 일반 메소드도 포함할 수 있다.상속 계층을 먹고 들어간다는 점, 메소드 재정의 강제는 interface로도 가능하다는 점 때문에 신중하게 써야한다. interface인터페이스에 어떤 메서드가 있는지 알고 있다면, 각 클래스에서 인터페이스를 어떻게..
Encoding 정리. Unicode, ANSI, UTF, CP949
Encoding 정리. Unicode, ANSI, UTF, CP949
2017.06.05Unicode유니코드 자체는 특정 encoding 방식을 가리키는 말이 아니라, 순서(U+????)와 문자를 1:1로 매핑해놓은 하나의 코드표를 가리킨다. ANSI와 달리 전세계 글자를 하나의 코드표에 표현하기 위에 만들어졌기 때문에, Unicode 코드표 안에 전세계 글자가 모두 들어있다. UTF(Unicode Transformation Format)은 유니코드 표를 보고 문자를 bytes로 변환하는 encoding 방식이다. ex, (U+C548, 안) 이라는 문자가 있을 때, 이 문자를 어떤 바이너리 데이터로 변환할 것인가?를 결정하는 것이 UTF-8이니 UTF-16이니 하는 Encoding이라는 것이다.(U+C548, 안)은 UTF-8의 경우 0xec9588으로, UTF-16의 경우 0xc548로..
IP parsing(+C), URL parsing 정규식 pattern
IP parsing(+C), URL parsing 정규식 pattern
2017.02.01직접 짜기 전에 org.springframework.web.util.UriComponentsBuilder 참조. IP, HOST, HTTP 등 패턴이 static 변수로 선언되어 있음. 또는 InetAddressValidator 같이 아예 유틸리티 클래스로 제공되고 있을 수 있다. 비슷한 계열이 몇 개씩 된다. ```java InetAddresses.isInetAddress() -- guava 530ms InetAddressUtils.isIPv4Address() -- httpclient 1146ms InetAddressValidator.getInstance().isValid() -- apache.commons 1573ms InetAddress.getByName() -- java.net 인데... ㄴ do..
서버 취약점 점검 체크리스트
서버 취약점 점검 체크리스트
2017.01.27이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
call-by-reference, call-by-value + call-by-address
call-by-reference, call-by-value + call-by-address
2016.11.22주소0차1차 &pp*p 122EF560 125F7458 71 Note ) java에서 말하는 참조 변수와, C++에서 말하는 참조 변수가 다름을 알아야 혼동을 피할 수 있다.C++에서 참조 변수는 java나 C에는 없는, 변수 자체의 alias 개념이다 ( case 3 참조 )java에서 참조 변수란 C나 C++에서 말하는 포인터 변수와 동일하다. 즉 배열, 객체 등을 가리키는 변수를 말한다.( C의 포인터 변수와 다른 점은 참조 변수에 아무 값이나 대입할 수는 없다는 것이다. )아마 java가 포인터를 지원하지 않으면서 포인터 변수 보다는 참조 변수라는 말을 쓰는 것 같다. case 1: call-by-value java는 항상 call-by-value다. ( 정확하게는 call-by-sharing =..
객체 지향 5대 원칙 : SOLID
객체 지향 5대 원칙 : SOLID
2016.09.13[위키 link] 단일 책임의 원칙 (SRP, Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 어떤 코드를 어디에 두어야 하는가?를 결정할 때 많이 도움이 되는 원칙. '그 클래스를 변경해야 하는 상황,원인,이유가 딱 한가지 인지' 를 보면, 단일 책임으로 제대로 분리되었는지를 확인할 수 있다. 지키지 않는 경우 3.7 뒤엉킨 변경 문제가 발생한다. 클래스는 그 책임을 완전히 캡슐화해서 제공해야 한다. 어떤 클래스에 변경이 발생했을 때, 변경이 발생했다는 그 이유만으로 다른 클래스에도 변경이 발생해야하는 상황이 있어서는 안된다는 것이다. (어떤 사유로 내부 로직을 변경했다면, 거기서 끝나야 한다는 의미) 지키지 않는 경우 3.8 산탄총 수술 문제가 발생..
객체 지향 패러다임
객체 지향 패러다임
2016.09.12객체 지향 객체지향 패러다임을 사용할 때, 객체를 만드는 1순위 원칙은 책임이다. 객체를 물리적 또는 추상적 대상에 비유하는 것이 도움이 된다. (Domain Model에 한해서) Alan Kay : OOP to me means only messaging, local retention and protection and hiding of state-process, (상태 변경 프로세스의 로컬 바운더리 유지, 보호, 숨김. 더 많은 영역에서 상태를 변경 할 수록, 어디서 변경했나 추적하기 어렵고, 이는 예상과 다른 변수값을 유발하며, 버그를 생산한다.) and extreme late-binding of all things. https://velog.io/@eddy_song/alan-kay-OOP http:/..