본문 바로가기

전체 글

(119)
[Linux] Host와 Hosting이란? Host와 HostingHost의 개념에어비엔비에서 집주인을 host라 하고, 그 집에 잠시 상주 하는 사람을 guest라 부른다. 집주인은 집을 일정기간 빌려주어 사람들에게 서비스를 제공한다. 마찬가지로 해당 컴퓨터 주인을 host 부르며, 조금 더 정확히는 네트워크 망에 연결된 다른 디바이스에게 데이터를 제공할 수 있는 디바이스를 호스트라 한다. 그렇다면 네트워크에 연결되어 있을려면 무엇이 필요한가? 인터넷상의 주소가 필요하다. 그것이 IP(Internet Protocol)이다. 그중에서도 인터넷 상의 고유의 주소인 Public IP가 필요하며, 디바이스가 통신망에 연결되어 있어야한다. 디바이스가 인터넷 주소가 있으면, 그 집에서 서비스를 제공할 수 있으므로 host로서 역할을 할수 있게 된다. 따라..
[Java] 데코레이터 패턴 (Decorator Pattern) 데코레이터 패턴이란?데코레이터 패턴(Decorator Pattern)은 객체의 기존 코드를 수정하지 않고 확장하면서 기능을 동적으로 추가하고 싶을 때 쓰는 디자인 패턴이다. 이 패턴은 상속을 사용하는 대신 객체를 "감싸는" 방식으로, 기존 객체의 기능을 더 유연하게 확장할 수 있다. 프록시 패턴(Proxy Pattern)에서도 프록시 객체에서 실제 객체를 '감싸서' 실제 객체의 접근을 제어하거나 추가적인 기능을 수행한다. 데코레이터 패턴이 쓰이는 대표적인 경우는 입출력 스트림(I/O Stream), 압축, 암호화 등의 기존의 베이스 클래스를 그대로 사용하면서 다양한 기능을 동적으로 추가해야 할 때이다.데코레이터 패턴 예제메서지 기능을 수행하는 기존의 객체를 만들기 위해 필요한 인터페이스와 클래스이다.//..
[Java] 문자 기반 스트림과 보조 스트림 문자 데이터를 다루는데 사용한다는 것만 빼면, 바이트 기반 스트림과 문자 기반 스트림의 사용법은 방법이 거의 같다. 아래는 문자기반 스트림의 의존성을 표현한것이며, 바이트기반 스트림과 유사한것을 알수있다.  Reader/Writer 클래스는 InputStream/OutputStream고 마찬가지로 추상 클래스이며, BufferedReader/BufferedWriter와 InputStreamReader/OutputStreamReader는 Reader/Writer의 자손이면서 기반 스트림(Base Stream)을 참조하는 보조스트림(Auxiliary Stream)이다. 보조스트림은 자체적으로 입출력을 수행할 수 없기 때문에 기반 스트림(Base Stream)이 필요하다.문자 기반의 스트림Reader와 Wri..
[Java] 바이트 기반의 보조 스트림 Filter I/O StreamFilterInputStream/FilterOutputStream은 InputStream/OutputStream의 자손이면서 모든 보조스트림의 조상이다. 보조스트림(Auxiliary Stream은 자체적으로 입출력을 수행할 수 없기 때문에 기반 스트림(Base Stream)이 필요하다. FilterInputStream/FilterOutputStream의 모든 메서드는 단순히 기반스트림의 메서드를 그대로 호출할뿐이며, FilterInputStream/FilterOutputStream 자체로는 아무런 일도 수행하지 않는다. FilterInputStream/FilterOutputStream은 상속을 통해 원하는 작업을 수행하도록 읽고 쓰는 메서드를 오버라이딩 해야한다. 다음 Fi..
[Java] Byte Stream의 사용법 프로그램이 종료될때, 사용하고 닫지 않는 스트림을 JVM이 자동적으로 닫아 주기는 하지만, 스트림을 사용해서 모든 작업을 마치고 난 후에는 close()을 호출해서 스트림을 반드시 닫아서 사용하던 I/O 자원을 반환해야한다. Java 7 이후로는 try-with-resources 문법이 도입되어, 스트림을 명시적으로 닫지 않아도 자동으로 자원이 해제되도록 할 수 있다. 이 문법은 AutoCloseable 인터페이스를 구현하는 클래스(예: 모든 스트림 클래스)에서 지원된다. 자세한 내용은 예외 처리 (Exception Handling)에 설명되어있다.InputStream과 OutputStream의 메서드mark()와 reset() 사용법스트림의 종류에 따라서 mark()와 reset()를 사용해서 이미 읽..
[Java] I/O Stream (Byte Stream, Character Stream) I/O란?I/O(Input/Output)는 컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 예를 들어, 프로그램에서 메모리나 디스크에 있는 데이터를 읽고 쓰기,  System.out.prinln()도 호출하여 화면(콘솔)에 출력하는 것이 입출력 작업이다. 그리고 네트워크를 통해서 외부의 장치와 데이터를 송수신 하는것도 마찬가지이다.I/O StreamJava에서 입출력(I/O)을 수행할려면, 어느 한쪽에서 다른 쪽으로 데이터를 전달하기 위해서 두 대상을 연결하고 데이터를 전송할 수 있는 통로가 필요하다. 이를 스트림(stream)이라고 하며, 데이터를 운반하는 연결 통로이다. 왜 이렇게 Java Application에서 입출력(I/O)을 수행하기 위해서 Java API인 I/O..
[Java] Single Thread와 Multi Thread Multi Threading 개념Multi Threading란Multi Threading은 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것이다. 그러나 Multi Threading에서 스레드들은 번갈아가면서 실행되는 경우가 더 일반적이다. 보통 스레드의 수는 언제나 코어의 개수보다 훨씬 많은 환경이기 때문이다. 그래서 프로세스의 성능이 단순히 스레드의 개수에 비례하는 것이 아니다. 경우에 따라 하나의 스레드를 가진 프로세스 보다 두 개의 스레드를 가진 프로세스가 오히려 더 낮을 성능을 보일수도 있다. 물론, CPU 코어의 개수에 따라 Multi Threading은 병렬로 처리될수 있다. CPU 코어 개수가 실행되는 스레드 개수 이하일떄는 말이다. 실제로 CPU의 코어에서는 한번에 하나의 ..
[Java] Thread 구현과 실행 Thread 구현Thread 구현스레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법 두가지가 있다. Thread 클래스를 상속받으면 다른 클래스를 상속받지 못하기 때문에 Runnable 인터페이스를 구현하는 방법이 일반적이다. Runnable 인터페이스를 구현한 다른 클래스의 인스턴스를 참조할수 있기 때문에 변경에 용이하기도 하다. Runnable 인터페이스는 오로지 run()만 정의되어 있는 간단한 인터페이스이다. run() 메서드의 구현부만 작성해주면 되는것이다. 위의 두 가지 방법 중에서 어떤 것을 선택할지라도, 스레드를 구현한다는 것은 run() 메서드의 구현부의 로직만 작성하면된다. 그러나 Thread 클래스를 상속받은 경우와 Runnable..