C++와 JAVA을 비교하는 것은 대학에서 프로그래밍 언어를 배울 때, 얼핏 배우고 지나갔던 내용이었다. 비슷한 성격(객체지향)을 띄는 언어이지만, 차이점도 극명한 언어이기도하다. 나름의 기준으로 3가지 기준으로 차이점들을 정리해봤다. 아, 그리고 여기에 작성되는 것들이 JAVA와 C++ 차이점의 전부는 아니라는 점 꼭 알아뒀으면 좋겠다. 그리고 나름대로 중요한 것만 뽑았지만... 아닐 수도 있다.. 1. 상속 대학 수업에서 교수가 학생에게 C++과 JAVA의 차이점을 묻는다면, 높은 확률로 학생은 상속에 관련된 차이점을 대답할 것이다. 그정도로 상속에 있어 두 언어의 차이점은 극명한데, JAVA가 C++보다 단순한 상속 체계를 지원한다. 첫째로, C++은 다중 상속을 지원하고 JAVA는 그렇지 않다. ..
정보보호 관련 수업을 들으면, 가장 먼저 배우게 되는 내용이 SSL이다. 암호화의 기원, DES, AES와 같은 개요에 해당하는 내용은 생략하고, 바로 본론으로 들어가도록 하겠다. 대칭키(Symmetric Key) 암호화 방식은 암호화와 복호화에 같은 암호 키(대칭키)를 사용하는 암호화 알고리즘이다. 후술할 공개키 암호화 방식에 비해 암호화 및 복호화가 빠르다는 장점이 있다. 하지만, 암호화 통신을 하는 사용자끼리 같은 대칭키를 공유해야만 한다는 단점이 있다. ▶대칭키 암호화 방식을 잘 설명한 그림. 대칭키를 공유해야만 한다는 것이 왜 단점일까? 먼저, 대칭키 암호화 방식은 암호화와 복호화가 비교적 간편하다. 게다가 대칭키를 사용자끼리 물리적으로 직접 만나서 전달하지 않는한, 대칭키를 전달하는 과정에서 ..
'프레임워크(Framework)'라는 용어는 정말 많이 쓰이지만, 딱 정의를 내리기엔 애매한 용어같다. 먼저, 위키피디아 한국어판의 '소프트웨어 프레임워크'에 대한 정의는 아래와 같다. "소프트웨어 환경에서 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조" '라이브러리(Library)'라는 용어의 경우에는 프레임워크에 비해 비교적 정의가 명확한데, 일단 위키피디아 한국어판의 정의는 아래와 같다. "소프트웨어 개발에 쓰이는 하부 프로그램들의 모임" 즉, 자주 쓰일 만한 기능들을 (따로 구현하여) 모아 놓은 유틸(혹은 클래스)의 모음이라고 할 수 있다. 라이브러리와 프레임워크, 이 둘은 애플리케이션의 틀과 구조를 결정한다는 측면에서 활용도가 상당히 유사하다. 그래서 이를 구분하기가 굉장히 힘들..
당신이 인터넷으로 웹 페이지에 접속 할 때 어떤 네트워크 작용이 일어나는지 설명하는 것. "어느정도로 자세히 설명해야하는가?" 에 대한 명확한 기준은 없지만, 대학 시절 배운 지식만으로도 충분히 자세히 설명할 수 있다. 이 세상의 대부분 웹 서버는 모두 IP 주소를 가지고 있다. 당신이 인터넷을 서핑하는 것도, 해당하는 IP주소로 접속하여 그 웹서버가 제공하는 데이터를 보는 것이다. 즉, 브라우저에 IP 주소를 직접 입력하면 이 포스팅에서 설명할 대부분 과정을 생략하고 웹 사이트에 접속할 수 있다. ▶네이버의 IP주소를 직접 입력하여 접속한 모습, nslookup 명령어로 DNS서버에서 IP주소를 찾았다. 이렇게 접속하면 속도도 뭔가 빠른것 같고(실제로 더 빠르긴 하지만 체감하기 어렵다.) 전과 다름없는..
상호배제(Mutual Exclusion)란, 특정 프로세스가 공유 자원을 사용 중일 때 다른 프로세스가 이 자원에 접근하지 못하도록 막는 것을 의미한다. 그러니까, 공유를 하면 안되는 자원(Resource)의 동시 사용을 피하는 방법 중 하나이다. 스레드의 경우, 프로세스와 달리 메모리의 Stack 영역을 제외한 부분을 다른 스레드와 공유하는데, 이 부분에서 스레드간 동시 사용을 피하고 싶을 때 주로 사용한다. (※참고: [IT 기술면접 준비자료] 교착상태와 식사하는 철학자들) 동시 접근을 막기 위해 프로그래머에 의해 구현된 코드 영역을 임계 구역(Critical Section)이라고 한다. ▶상호배제를 재미있게 설명한 삽화. Mutex가 지켜주는 덕에, 화장실은 딱 1명만 쓸 수 있다. 더 쉬운 이해를..
Java의 Collection Framework는 프로그램의 개발에 있어, 유용하게 쓰일 자료구조를 정의해놓은 것이다. 이를 통해 모든 객체타입을 구성요소로 하여 데이터 저장 방식을 손쉽게 활용할 수 있다. 단, Primitive Type(기본형)의 경우, 구성요소가 될 수 없음에 유의하자.※ 참고: [IT 기술면접 준비자료] JAVA의 Wrapper Class와 AutoBoxing 1. 컬렉션 프레임워크의 인터페이스 구조 왠 인터페이스!? 라고 생각하는 사람도 있겠다. 사실 컬렉션 프레임워크의 구성요소들은 '미리 정의된 클래스'이다. 그리고 이들을 계층화 (묶어주는)해주는 인터페이스가 존재한다. ▶ 컬렉션 프레임워크의 인터페이스 구조 위 그림은 컬렉션 프레임워크의 인터페이스만 나타낸 그림이다. 즉, 모..
윈도우 운영체제의 가상 메모리(Virtual Memory)는 RAM을 관리하는 방법 중 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 방식을 말한다. RAM의 부족한 용량을 보완하는 데 주로 쓰인다. 윈도우 운영체제는 가동되고 있는 프로세스들의 내용(페이지) 중, 덜 중요한 것들을 하드 디스크의 공간에 옮겨 놓는다. (당연히 어디에 저장했는지도 기록해 놓는다.) 그리고 프로세스가 동작하는 도중, 메모리에 필요한 데이터(페이지)가 없으면 하드디스크를 찾아 해당 데이터를 가져온다. (이 과정에서 속도 저하가 발생. ROM이 RAM보다 느리기 때문.) ▶ 가상메모리로 메모리 용량을 확보한 모습. 하지만 가상메모리는 용량이 충분할 때도 쓰인다, 가상메모리의 동작 프로세스를 설명하..
해싱(Hashing)은 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것이다. (출처: http://www.terms.co.kr/hashing.htm) 그리고 해싱은 해시 테이블(Hash Table)과 해시 함수(Hash Function)로 구성된다. 그림1. 해시테이블과 해시함수의 역할을 나타내는 개념도 해시테이블(Hash Table, Hash Map이라고도 불림.)은 Key와 Value를 갖는 자료구조이다. 주로 효율적인 검색에 활용되는데, 위 그림을 보자. John Smith라는 사람의 전화번호를 찾는 과정을 가정했을 때, 해시함수(Hash Function)의 입력값은 "John Smith"이고 출력값은 "01"이다. 그리고 색인이 "01"인 bucket에서 "521-8..
Process와 Thread의 비교는 전산학의 '꽃' (아니면 말고..)인 '운영체제'에서 중요하게 다루는 내용이므로 취준생이라면 꼭 짚고 넘어가야할 내용이다. 먼저, Process와 Thread에 대해 정의를 내리자면, Process: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다. Thread: 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.(출처: 위키피디아 해당 항목.) 프로그램(Program)에 대해 다들 알 것이다. 프로그램은 명령어들과 데이터의 묶음이라고 할 수 있다. 운영체제가 프로그램에 메모리를 할당하여 실행하면 이를 프로세스라고 한다. CPU의 프로세서는 하나..
JAVA의 Wrapper Class에 대한 개념은 그냥 지나가기 쉬운 부분이라 꼭 정리를 해둘 필요가 있다. 특히, JDK 1.5 이후 버전부터 AutoBoxing기능이 지원되면서, 더욱 그냥 지나가기 쉬워졌다. 그리 어려운 내용이 아니니 쭉 훑어보면 될 것이다. JAVA는 객체로 이루어져있고, 모든 데이터가 객체로 표현된다. Object를 상속하는 모든 클래스를 참조형(Reference Type)이라고 한다. 하지만 이처럼 객체로 표현하지 않고 원시적인 형태로 표현하는 예외를 두고 있는데, 그것이 바로 기본형(Primitive Type)이다. JAVA의 기본형과 이에 대응하는 Wrapper Class. (출처: 자체제작) 표의 좌측에 나열된 기본형의 예를 보면 기본형의 정의에 대해 더 명확해졌을 것이다..