목록Java (53)
오답노트
HTTP HTTP(Hyper Text Transfer Protocal)로 RFC 2616에서 규정된 Web에서 데이터를 주고 받는 프로토콜이다. 이름에는 하이퍼텍스트전송용 프로토콜로 정의되어 있지만 실제로는 HTML, XML, JSON, Image, Voice, Video 등 다양한 컴퓨터에서 다룰 수 있는 것은 모두 전송할 수 있다. HTTP는 TCP를 기반으로한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜이다. HTTP는 메시지를 주고(Request) 받는 (Response) 형태의 통신 방법이다. 메소드 https://ko.wikipedia.org/wiki/HTTP 멱등성은 서버의 몇번을 요청하더라도 같은 내용을 응답하는 것이 멱등성이다. 상태 코드 자주 사용되는 코드
URI 과 URL URI(Uniform Resource Identifier)는 인터넷에 특정 자원을 나타내는 주소 값으로 해당 값을 유일하다. (응답을 달라질 수 있다.) URL(Uniform Resource Locator)는 인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소이다. 즉 URL은 URI의 하위 개념이다. URI 설계 원칙 (RFC-3986) 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용한다. URI마지막 문자로 (/)는 포함하지 않는다. 하이픈(-)은 URI 가독성을 높이는데 사용한다. 밑줄(_)은 사용하지 않는다. URI 경로에는 소문자가 적합하다. 파일 확장자는 URI에 포함하지 않는다. 프로그래밍 언어에 의존적인 확장자를 사용하지 않는다. 구현에 의존적인 경로를..
REST REST(Representational State Transfer : 자원의 상태 전달)는 네트워크의 아키텍쳐이다. 아래 6 항목을 지켜야 RESTful하다고 할 수 있다. Client, Server : 클라이언트와 서버가 서로 독립적으로 분리 되어 있어야한다. Stateless : 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다. Cache : 클라이언트 서버의 응답을 Cache(임시저장) 할 수 있어야한다. 클라이언트가 Cache를 통해서 응답을 재사용할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춘다. 계층화 : 서버와 클라이언트 사이에, 방화벽, 게이트웨이, Proxy 등 다양한 계층 형태로 구성이 가능해야 하며, 이를 확장 할 수 있어야한다. 인터페이스 일관성 : 인터페이스..
World Wide Web World Wide Web은 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말한다. Web의 용도는 다음과 같이 나눌 수 있다. Web Site : HTML로 구성된 여러사이트 API :Open API와 같이 웹서비스를 위한 API User Interface : Crome, Safari 등등 Web을 구성하는 3가지 요소 URI : 리소스 식별자로 특정 사이트, 특정 쇼핑 목록, 동영상 목록 등 모든 정보에 접근할 수 있는 정보이다. HTTP : 주소로 접근할 때, 어떤 프로토콜로 소통하여 어플리케이션을 컨트롤할 때 사용 HTML : 하이퍼미디어 포멧으로 XML을 바탕으로 한 범용 문서 포맷이다.
전략 패턴 유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여, 유연하게 확장하는 패턴이다. 개방폐쇄 원칙과 의존 역전 원칙을 따른다. 예제 클래스 public interface EncodingStrategy { String encode(String text); } public class Encoder { private EncodingStrategy encodingStrategy; public void setEncodingStrategy(EncodingStrategy encodingStrategy) { this.encodingStrategy = encodingStrategy; } public String getMessage(String msg){ retu..
파사드 패턴 파사드는 건물의 앞쪽 정면이라는 뜻을 가진다. 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 파사드라는 객체를 두고, 여기서 제공하는 interface만을 활용하여 기능을 사용하는 방식이다. 패턴 적용 전 클래스 public class Ftp { private String host; private int port; private String path; public Ftp(String host, int port, String path){ this.host = host; this.port = port; this.path = path; } public void connect(){ System.out.println("FTP HOST : " + host + "..
옵저버 패턴 옵저버 패턴은 변화가 일어 났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다. 많이 보이는 곳은 event listener에서 해당 패턴을 사용하고 있다. 클래스 package observer; public class Button { private String name; private IButtonListener buttonListener; public Button(String name){ this.name = name; } public void click(String message){ buttonListener.clickEvent(message); } public void addListener(IButtonListener iButtonListener){ this.butt..
프록시 패턴 최초에 인스턴스를 캐싱해 놓고 그 이후에 다시 호출 될 때, 캐싱된 인스턴스를 사용해 시간을 절약하는 패턴이다. Class public interface IBrowser { public Html show(); } public class BrowserProxy implements IBrowser{ private String url; private Html html; public BrowserProxy(String url){ this.url = url; } @Override public Html show() { if(html == null){ this.html = new Html(url); System.out.println("BrowserProxy loading html from : " + ur..
어댑터 패턴 서로 다른 두 클래스를 연결하는 클래스를 만들어 주는 패턴이다. A 인터페이스를 사용하는 클래스 (이하 A 클래스)에 B 인터페이스를 사용하는 클래스(이하 B 클래스)를 연결하고 싶다면 A 인터페이스를 사용하는 클래스를 만들고 생성자 인자로 B 인터페이스를 받는 클래스를 만들어 A 인터페이스를 Override하여 사용하면된다. 인터페이스 public interface Electronic110V { void poewrOn(); } public interface Electronic220V { void connect(); } 인터페이스를 사용하는 클래스 public class AirConditioner implements Electronic220V{ @Override public void conn..
Critical Section 과 Semaphore Critical Section은 두 개 이상의 thread가 동시에 접근하는 경우 문제가 생길 수 있기 떄문에 동시에 접근할 수 없는 영역 Semapore는 특별한 형태의 시스템 객체이며 get/release 두 개의 기능이 있다. 한 순간 오직 하나의 thread만이 semaphore를 얻을 수 있고, 나머지 thread들은 대기(blocking) 상태가 된다. Semaphore를 얻은 thread 만이 critical section에 들어갈 수 있다. Synchronized class Bank{ private int money = 10000; public synchronized void saveMoney(int save) { int m = getMo..