반응형


제목:한적한 밤거리

 



인터페이스란

일종의 추상클래스

추상메서드를 갖지만 추상 클래스보다 추상화 정도가 높다

추상메서드와는 달리 몸총을 갖춘 일반메서드 또는 멤버변수를 구성원으로 가질 수 없다.


오직 추상 메서드의 상수만 멤버로 가짐


추상클래스 부분적으로 완성된 '미완성 설계도'

인터페이스 구현된것은 아무것도 없고 밑그림만 그려져 있는 '기본 설계도'


인터페이스는 다른 클래스를 작성하는데 도움을 줄 목적으로 작성


인터페이스 작성


class → interface


interface 인터페이스이름{

public static final 타입 상수 이름= 값;

public abstract 메서드 이름(매개 변수 목록);

}


제약사항

모든 멤버변수는 public static final 이어야 하며 생략 가능

모든 메서드는 public abstract 이어야 하며 생략 가능


생략된 제어자는 컴파일러가 자동으로 추가해줌


인터페이스 상속

인터페이스는 → 인터페이스 끼리만 상속가능

클래스와 달리 다중상속 가능


interface A{

void x();

}


interface B{

void y();

}


interface C extends A,b{}


인터페이스 구현


자체 인스턴스 생성X


정의돈 추상 메서드가 몸총을 만들어주는 클래스를 작성

인터 페이스를 구현한다는 의미의 키워드 'implements'를 사용


class A implements B{}


class A implements B{

public void x(){ 구현내용}

public void y(){ 구현내용}

}


인터페이스도 일부만 구현하면 추상클래스로 선언 되어야 함


abstract class A implements B{

public void x(){ 구현내용}

}


상속과 구현을 동시에 할수 있다.


class A extends C implements B{

public void x(인자값1,인자값2){ 구현내용}

public void y(인자값1){ 구현내용}

}


오버라이딩시 조상 메서드보다 넓은 범위의 접근 제어자를 지정해야함


인터페이스 상속시

인터페이스상의

public abstract가 생략되있음


그렇기 때문에 상속받는 클래스는 public void~  접근제어자를 반드시 public으로



인터페이스를 이용한 다중상속


이름이 같고 메서드 선언부가 일치 구현 내용이다르면 누구의 것을 상속받는지 알수 없다 그렇기 때문에 단점이 더커 다중상속은 자바에서 하지않음


C++은 다중상속을 하기 때문에 그에 대한 대응으로 '자바도 인터페이스를 이용한다면 다중상속이 가능하다'라는 것일뿐 자바에서 인터페이스로 다중상속을하는 경우는 거의없다.


인터페이스를 이용한 다형성


다형성

B b=(B)new A();

B b=new A();


인터페이스 다형성

void B(A a){}

매게 변수의 타입으로 사용될 수 있다.


자손을 호출할때는 매개변수로 인터페이스를 구현한 클래스의 인스턴스를 넘겨줘야함


메서드의 리턴 타입으로 인터페이스의 타입을 지정하는것도 가능


B method(){

return new B();

}


A a=B.get메소드("명");


public static A get메소드(타입 명){

if(명.equals("명"){

return new B();

}else{

A a=new B();

return a;

}

}



위결과는 A a=new B(); tngodehlsrjtrhk rkxdma


분산환경 프로그래밍에서 위력을 발휘 사용자 컴퓨터의 설치된 프로그램을 변경x

서버측의 변경만으로도 사용자가 새로 개정된 프로그램을 사용가능




인터페이스의 장점


1.개발시간의 단축

하나의 인터페이스로 여러사람이 작업가능

2.표준화가 가능

기본틀을 먼저 인터페이스로 작성후 일관되고 정형화된 프로그램의 개발가능

3.서로 관계없는 클래스를 관계를 맺어줌

서로 아무런 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현 함으로 관계를 맺어줌

4.독립적인 프로그래밍이 가능

클래스의 선언과 구현을 분리 시킬수 있다.

클래스와 클래스의 직접적인 관게를 인터페이스를 이용 간접적인 관계로 변경하면 다른클래스에 영향을 미치지 x


void A(class명 b){}


void A(class명 c){}


void A(class명 B[b의 상위클래스]){}


void A(class명 C[c의 상위클래스]){}


같은행동을 하여도 적용하는 대상이 다르면 그때마다 적용해야함


인터페이스 적용 후

interface a{}


class x extends B implements a{}


class y extends B implements a{}


class z extends C implements a{}


각기 맞게 상속후 공통 사용 인터페이스를 다시 적용가능


void A(a 명){}


ex) 총해야할 행동 1,2,3,4 가 있고

각기 객체 마다 해야할 할동이 다를경우


중간처리 할곳으로 연결시켜주는게 인터페이스


interface 명{

해야할일1();

해야할일2();

해야할일3();

해야할일4();

}

class 처리단 implement 명 {

해야할일1(){할일};

해야할일2(){할일};

해야할일3(){할일};

해야할일4(){할일};

}


class a extends A implments 처리단{

처리단 명=new 처리단();

할일1;

할일2;

할일3;

할일4;

a만 할일1;

}

class b extends A implments 처리단{

처리단 명=new 처리단();

할일1;

할일2;

할일3;

할일4;

b만 할일1;

}


이렇다면  처리단만 수정하면 전부 적용가능


인터페이스의 이해

클래스를 사용하는 user와 클래스를 제공하는 privider가 있다.

메서드를 호출하는 user에서는 사용하는 메서드 privider의 선언부만 알면 된다 ( 내용은 몰라도됨)


A클래스에서 B클래스의 메서드를 실행하는 관계에서

한쪽만 변경되도 다른쪽도 변경이되어야 한다. A-B관계


but 인터페이스는 A-I-B 관계를 만들어버림으로서 한쪽이 변경되도 서로 영향이 미치지 않도록하는것





반응형

'코딩 > Java' 카테고리의 다른 글

java.long 패키지  (0) 2016.03.30
예외처리(excption handling)  (0) 2016.03.29
추상클래스(abstract class)  (0) 2016.03.22
다형성(polymorphism)  (0) 2016.03.21
제어자(modifier)  (0) 2016.03.16


반응형

제목:대성리


jsp(java server page)


java를 이용하여 동적인 웹페이지를 만들기위해 sun microsystems사가 개발한 기술


기존 브라우저는 HTML형식의 문서만 표시 했음


동적인 웹 페이지

사용자의 요청 처리 결과에 따라 자동으로 변화 될수 있는 웹페이지가 필요했다.

EX)시간을 표시해주는 웹은 시간이 가지 안았음.


동적인 페이지를 만들면 사용자가 요청이있을때 마다 서버가 그때의 시간을 표시해줌


jsp문서는 html+java 문법의 형식이 혼합된 형태


java:<%...%>


jsp 컨테이너는 html코드가 아닌 부분을 분석해 jvm(java virtual machine)을 통해 자바코드를 실행


그결과 java코드를 html코드로 변환해서 보게 해준다.


jsp의 특징


강력한 이식성

jvm을 이용해 어떤 운영체제 에서도 사용이 가능함(리눅스,윈도우 등등)


서버자원의 효율적인 사용

cgi방식의 가장큰단점 중의 하나는 프로세스 관리의 어려움을 인핸 서버자원의 낭비

사용자가 요청을 하면 시작하고 끝내고 다른 사용자의 요청을 실행하여 수많은 사용자가 접속할 경우 프로세스 생성이 너무 많은 서버자원을 필요로함 (서버다운위험 등등)


jsp는 이문제점을 스레드(thread)기반의 아키텍처를 사용하여 개선

요청이 들어오면 서버는 요청에 맞는 jsp페이지에 대한 서블릿 인스턴스를 단 한번 생하고 이후 같은 페이지의 요청이 오면 생성되어 있는 인스턴스에 스레드 단위로 요청을 전송 처여 처리 서버자원의 효율적인 사용이가능하게함


간편한 mvc패턴 적용

MVC(Model-View-Controller)패턴

jsp(View)-자바빈스(Model)-서블릿(Controller) 구현

각각으로 분업이 가능하게 하는 장점과 자바빈스를 사용 비지니스 로직을 분리하면 컴포넌트화 하여 공통로직의 재사용이 용이하다.


jstl 커스텀 태그 등을 이용한 개발 용이성

JSTL(jsp standard tag library)과 커스컴 태그의 대한 지원이 강화  별도의 태그 라이블러리 파일을 만들어 정리 가독성과 유지 보수의 효율이 대폭상승




서블릿의 개요

웹서버 측에서 사용자의 요구에 따라 자동으로 변화된 html형식의 페이지를 생산해 전송해 줄수 있는 여러 기술이 개발

그중 자바 진형의 기술이 바로 서블릿(servlet)이다.


웹서버 상에서 실행되는 자바의 클래스 파일

기본적으로 자바의 api를 그대로 사용 강력한 객체 지향성등 자바의 장점을 모두 가지고 있다.

서블릿은 반드시 javax.servlet.servlet인터페이스를 구현(implements)해서 작성 해야하며

http프로토콜의 요청과 응답의 형태로 다룬다


클라이언트의 요청-웹서버는 그요청에 해당하는 서블릿 클래스 파일을 실행 서블릿클래스에서는 요청을 처리해 결과물(html 형식의 페이지)을 만들어 냄 그러면 웹서버가 그페이지를 클라이언트에 전송하는 것


서블릿이란 말그대로 server side applet 즉 서버 사이드의 자바 응용프로그램


jsp파일을 서블릿형태의 자바 코드로 자동 변환 후 서블릿의 라이프 사이클을 거치면서 클라이언틔 요청을 처리해준다

jsp요청또한 서블릿의 요청 처리 방식으로 처리 같은개념


http프로코톨의 이해

인터넷 통신 프로토콜에는 TCP/IP,FTP,SMTP,HTTP등 많은 종류의 프로코로이 있다.

최상의 연결계층 끝판왕이 HTTP(hypertext transfer protocol)이다.


http프로콜의 구조


HTTP 프로토콜은 요청(requset)과 응답(response)의 형태로 이루어져 있다.

페이지 클릭시 http프로토콜의 요청 형태로 http메세지를 작성하여 웹서버에 전송

웹서버는 받은 http메세지가 요청(requset) 메시지임을 판단 데이터를 분석

http프로토콜의 응답(response)형태로 메시지를 작성해 브라우저에 보내 브라우저는 메시지를 받아 화면에 표시함


시작라인:요청,응답,요청URL

헤더:수행날짜,서버정보,브라우저 버전

본문:요청이나 응답에 필요한 내용



http요청(request)메세지

기본적으로  http메소드(method)와 접근할주소(url)정보 그리고 서버에 전달한 데이터폼 파라미터로 구성


http메소드는 클라이언트가 웹서버가 해야할 행동을 정해줌

GET,POST메소드가 있다.


GET메소드

시작라인 :주소?전송파라미터값

요청헤더:HOST,User-agent


장점:본문이 없어 전송속도가 빠르다

전송할 데이터가 적은경우 사용


POST메소드

시작라인 :주소

요청헤더:HOST,User-agent

본문:전송할 파라미터값


장점:길이제약이 없다.

파라미터값을 확인할수 없어 보안상 유용하다.


HTTP응답(response) 메시지


서버처리 성공여뷰를 표시하는 상태코드(http404,500등등)와 웹서버가 응답해주는 콘텐츠 타입정보(text/html, 이미지등)의내용으로 구성


웹컨테이너 란?

웹서버는 URL주소의 해석을 맡아주는 HTTP서버

jsp파일의 실행요청을 처리해주는 웹컨테이너로 구성됨


웹서버

1. http서버

2. 웹컨테이너


http서버:단순 주소 요청이 올경우 주소 매핑되 있는 컨텐츠를 사용자의 브라우저에 응답 형태로 전송


요청된 URL이 서블릿클래스,jsp파일 경우 웹컨테이너 에서 처리하도록 클라이언트의 요청에 넘겨줌

웹컨테이너:요청에 맞는 미리 설정된 서블릿 클래스 or jsp를 실행해 http서버에 넘겨줌


서블릿은 서블릿컨테이너

jsp는 jsp컨테이너

둘이 통합하여 웹컨테이로 통칭함


웹컨테이너로 자카르타 톰캣,웹로직,resin 등이있음


서블릿의 동작원리


사용자의 url

배포서술자(deplotment descriptor)가 필요

쉽게 서블릿 요청이오면 서버가 알아챌수 있도록 적어놓은 파일

서버에 요청이올때 배포서술자가 가야할곳을 지정 담당하는 웹컨테이너로 요청을 전달함


request,response 객체생성

request:java.servlet.http.httpservletrequset객체 타입 생성

response:java.servlet.http.httpservletresponse객체 타입 생성


서블릿 인스턴스와 스레드 생성

요청이 실행된적이 없다면 새로 인스턴스를 생성(메모리에 로드) init()메소드를 실행해 초기화 한뒤 스레드를 하나 생성

요청이 실행되었다면 기존에 인스턴스에 스레드만 하나 새로 생성

각 서블릿 인스턴스는 웹컨테이너 하나당 존재하기 때문에 init()메소드는 각 서블릿 하나씩만 호출


service()메소드 호출과 서블릿 클래스 실행

스레드가 생성되면 각 스레드에서 service()호출

호출후 http요청방식이

GET일경우 deGet()메소드

POST방식 doPost()메소드

요청,응답 객체를 인자로 자동 호출

개발자가 실제로 동적인 웹페이지를 생성 할수 있는 코드를 만들어야 하는 부분이 바로 doGet(),doPost()메소드 부분


응답과 스레드의 소멸

doGet(),doPost()메소드가 호출되어 사용자의 요청에 따른 동적인 웹페이지를 생성 결과물을

response객체를 웹컨테이너가 http응답형태로 바꾸어 웹서버로 전송

그리고 사용이 끝난 객체는 소멸 스레드를 종료 웹서버는 전송받은 http응답메시지를 사용자의 브라우저로 전송 사용자는 브라우저를 통해 동적으로 생성된 페이지를 받아봄




반응형


반응형

제목:surround

 

추상클래스란?

클래스를 설계도에 비유하면 추상클래스는 미완성 클래스에 비유

남겨진 클래스 추상클래스는 인스턴스를 생성x 상속된 자손클래스에서만 완성

 

추상클래스 자체 클래스 역활x

새로운 클래스를 작성하는데 있어서 바탕이되는 조상클래스로서의 의미를 가진다.

공통부분의 미완성 설계도로 나머지를 완성하는게 효율적

 

abstract class A{}

 

추상메서드를 포함하는 것 제외로 일반클래스와 전혀 다르지 않다

 

추상메서드(abstract method)

머서드는 선언부+구현부

선언부 는 작성 구현부는 작성x

미완성으로 남겨 놓는 이유는 메서드의 내용이 상속 받는 클래스에 따라 달라짐

조상클래스에서는 선언부만 작성

주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려주고

실제내용은 상속받는 클래스에서 구현하도록 비워 두는것

/*기능 수행 목적 기입*/

abstract 리턴타입 메서드이름();

구현부가 없기 때문에 {}사용 하지 않음 대신 문장의 끝;을적어줌

 

오버라이딩으로 모두 구현해줘야함 하나라도 구현x 자손클래스 역시 추상으로 지정

 

abstract class A{

abstract void x(변수값);

abstract void y();

}

 

class B extends A{

void x(변수값){실행할 내용}

void y(){실행할내용}

}

 

abstract[x,y다 있지 않기때문에 자손도 추상클래스 지정] class C extends A{

void x(변수값){실행할 내용}

}

 

추상-낱낱의 구체적 표상이나 개념에서 공통된 성질을 뽑아 이를 일반적인 개념으로 파악하는 정신 작용

 

추상화-클래스간의 공통점을 찾아서 공통의 조상을 만드는 작업

구체화-상속을 통해 클래스를 구현,확장하는 작업

 



abstract를 사용해 추상메서드를 정의해 놓으면 나여기 있어요 하는 게되어 꼭쓰게 됨. 단 추상메서드를 안다는 가정하에.

 

class a{

공통변수1;

공통행동 1;

공통행동 2;

개별행동 1;

}

class b{

공통변수1;

공통행동 1;

공통행동 2;

개별행동 1;

}

class c{

공통변수1;

공통행동 1;

공통행동 2;

개별행동 1;

}

 

추상으로 구현

abstract class x{

공통변수1;

공통행동1;

abstract void 공통행동2(인자);

}

 

calss a extends x{

void 공통행동2(인자) {행동}

개별행동1(){ 개별행동}

}

 

calss b extends x{

void 공통행동2(인자) {행동}

개별행동1(){ 개별행동}

}

 

calss c extends x{

void 공통행동2(인자) {행동}

개별행동1(){ 개별행동}

}

 

최대한 중복되는 기능은 줄여주는게 필요함

 

반응형

'코딩 > Java' 카테고리의 다른 글

예외처리(excption handling)  (0) 2016.03.29
인터페이스(interface)  (0) 2016.03.24
다형성(polymorphism)  (0) 2016.03.21
제어자(modifier)  (0) 2016.03.16
오버라이딩(overriding)  (0) 2016.03.16

+ Recent posts