본문 바로가기

Spring/Model1 _2(MVC)

0930 JSP - (MVC) writeForm.jsp , interface 인터페이스

728x90
반응형

Contents

     

    board;
    writeForm.jsp (MVC)

     

     

    그대로 작동하면 .jsp 로 가기 때문에 새로운 주소를 만들어 준다. 

     

    	<h1>writeForm.jsp (MVC) </h1>
    
    <fieldset>
    	<form action="./BoardWriteAction.bo" method = "post">
    		제목 : <input type = "text" name = "subject"><br>
    		작성자 : <input type = "text" name = "name"><br>
    		비밀번호 : <input type = "password" name = "pass"><br>
    		내용 : 
    		<textarea rows="10" cols ="20" name = "content"></textarea> 
    		<!-- textarea는 엔터치면안됨 -->
    		<hr>
    		<input type = "submit" value = "글쓰기">
    	</form>
    </fieldset>

     

    앞으로 pro 역할을 하는 페이지를 Action이라는 단어를 붙여 줄것. 

     

     

    http://localhost:8088/MVC/board/BoardWriteAction.bo

     

    주소로 이동됨! (매핑 되었다) 

     

     

     

     

     

     

     

    com.itwillbs.action;
    BoardFrontController

    2단계 -  /BoardWriteAction.bo 호출하기


    ♥2단계♥
    	System.out.println(" C : (2단계 시작) 가상주소 매핑 시작----------------------------------" );
    	
    	ActionForward forward = null;
    			
    	if(command.equals("/BoardWrite.bo")) {
    		System.out.println("C : /BoardWrite.bo 호출");
    		System.out.println("C : [패턴1] DB 사용 x, view 페이지 이동");
    		
    		forward = new ActionForward();
    		forward.setPath("./board/writeForm.jsp");
    		forward.setRedirect(false);
    		
    	}
    	else if (command.equals("/BoardWriteAction.bo")) {
    		System.out.println(" C : /BoardWriteAction.bo 호출 ");
    		System.out.println();
    	}
    	
    	System.out.println(" C : (2단계 끝) 가상주소 매핑 완료----------------------------------" );

     

    [패턴1] 

    DB 사용 하지 않고 , view 페이지 이동시키기 

     

     

    [패턴2] 

    DB 사용 해서 view 페이지 이동시키기 (화면 전환) 

     

     

     

     

     

     

    WriteAction -> List 로 이동하기 


    BoardWriteAction() 객체 생성 

    페이지가 움직일 때 마다 DB 호출을 하는 상황 발생 (의도치 않은 메모리 낭비 현상) 방지하고자 외부의 파일로 빼야함. 

     

    => Controller 자바 객체에 새로운 클래스 

     

     

     

     

     

    인터페이스 생성 


    개념 MVC.txt

     

     

     

    추상클래스

    객체를 혼자서 생성 할 수 없는 클래스 (자생력이 없음)

    => 누군가에게 의존해서 객체를 생성해야 하므로  상속 관계를 통해 객체를 생성한다.

     

     

    추상메서드를 포함하기 때문에 객체를 생성 할 수 없다.내 안에 있는 추상메서드를 호출할 가능성이 있기 때문에!

     

     

     

    추상메서드

    body {} 가 없는 메서드

      abstract class 클래스명 {   
                   변수, 상수 
                   메서드 , 추상메서드   
    }
    public abstract void method();

    body{} 대신에 세미콜론 ; 이 생긴다.

    메서드에 필요한 동작을 수행하는  body가 없다는 건 무슨 뜻일까?

     

    body가 없는 메서드 => 실행할 코드가 없는 메서드 (에러가 난다.)

    실행 불가, 이 메서드는 호출되면 안됨. 

     

     

     

     

    *상속관계를 사용할 경우 반드시 추상메서드는 오버라이딩 (부모의 메서드를 그대로 씀) 해서 사용해야 한다. (강제성)

    public void moethod () {

    }


     

    com.itwillbs.action;
    Action.java
    package com.itwillbs.action;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public interface Action {
    	
    	// execute() 실행 시 : request, response 전달 받아서 처리 
    	// 처리 완료 후 ActionForward를 리턴 할 것. 
    	
    	public ActionForward execute(
    			HttpServletRequest request, HttpServletResponse response) throws Exception;
    			
    }

     

     

     

     

     

    com.itwillbs.action;
    BoardWriteAction

    이 클래스의 목적은, 글쓰기라는 동작을 수행하는 객체이다. 

    기능 단위로 모듈을 나눠준다. 

    package com.itwillbs.action;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class BoardWriteAction implements Action {
    	
    	//글쓰기 동작 수행하는 객체 
    	@Override
    	public ActionForward execute(HttpServletRequest request, 
    			HttpServletResponse response) throws Exception {
    		
    		System.out.println(" M : BoardWriteAction.execute() 호출 ");
    		
    		// 한글 처리
    		request.setCharacterEncoding("UTF-8");
    		// 전달 정보 (파라메터 저장)
    		
    		// ip 저장 
    		
    		// BoardDAO 객체
    		// insertBoard()
    		
    		// 페이지 이동 
    		
    		return null;
    	}
    
    }

     

     

     

    com.itwillbs.action;
    BoardFrontController
    //BoardWriteAction() 객체 생성 
    BoardWriteAction bwa = new BoardWriteAction();
    
    try {
    bwa.execute(request,response);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

     

     

     

    BoardDTO, BoardDAO 생성 => 다음 페이지로..

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    개념설명


     

    Interface

    서로 다른 여러개의 클래스를 묶어서 한개의 이름(인터페이스)으로 관리(제어)한다.

    자바에서는 상속 기능으로 편리하게 부모 클래스의 기능을 물려받아 사용할 수 있다.

    그리고 그 상속은 클래스로도 구현이 가능하지만 인터페이스를 통해 더 다양한 기능들을 구현이 가능하다.

     

    인터페이스는 클래스와 굉장히 비슷하지만 둘을 구분 지을 몇 가지의 큰 특징이 있는데,

    그중 특히 인터페이스는 클래스와 달리 다중 상속이 가능하다는 점.

     

    Test;
    Test4.java
    interface Will{
    	public abstract void Hello();
    	public void Hello2(); //abstract 생략 가능 
    	/*public abstract*/void Hello3(); //abstract, public  생략 가능 
    }
    
    class Test implements Will{//구현하다 
    	// class 간의 상속은 extends , interface 간의 상속은 implements를 쓴다. 
    	
    	//alt shift s + v 
    	@Override
    	public void Hello() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void Hello2() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void Hello3() {   //default로 만드는 순간 에러난다!
    		
    		
    	}   
    	
    	
    }
    abstract class Shape{
    	public abstract void draw(Shape s);
    		
    
    	}
    
    class cir extends Shape{ //원
    	public void draw() {
    		System.out.println("원 그리기");
    	}
     
    	public void draw(Shape s) {
    		System.out.println(s + "그리기");
    	}
    }
    
    class Tri extends Shape{ // 삼각형
    //	public void paint() {
    //		System.out.println("삼각형 그리기");
    //	}
    //}
    	public void draw(Shape s) {
    		System.out.println(s + "그리기");
    	}
    }
    
    class Rec extends Shape{ //사각형 
    //	public void print() {
    //		System.out.println("사각형 그리기");
    //	}
    //}
    	
    	public void draw(Shape s) {
    		System.out.println(s + "그리기");
    	}
    }

    인터페이스의 멤버로는 상수와 추상 메소드, default 메소드, static 메소드가 있다.

    클래스와 달리 변수 생성이 불가능한 인터페이스는 필드 선언 시 아래와 같이 키워드를 생략해서 생성이 가능함.

    interface Will(인터페이스명){	// abstract 생략
    
    	// public static final 제어자 생략
    	int 상수명 = 100;
        
        	// public abstract 제어자 생략
    	void 메소드명(매개변수);
    }

    클래스와 달리 인터페이스는 필드에 public static final 제어자만, 메소드는 public abstract 제어자만 적용이 된다.

    이 제어자는 모든 인터페이스에 공통적으로 적용이 되는 부분이기 때문에 생략이 가능하고 컴파일러 단에서 자동으로 적용이 됨.

     

     

    interface 구현

    인터페이스는 직접 인스턴스를 생성할 수는 없고 클래스가 상속을 받아야만 생성이 가능하다.

    클래스는 extends를 통해 상속받지만 인터페이스를 상속받으려면 아래와 같이 implements 키워드가 있어야 한다.

    class 클래스명 implements 인터페이스명{
    	public void 메소드명() {
    	}
    }

     

    또한 클래스와 인터페이스에서 동시에 상속받는 것도 가능

    class 클래스명  extends 부모클래스명 implements 인터페이스명{...}

     

    interface 다중 상속

    인터페이스는 클래스와 달리 여러 개의 인터페이스를 다중 상속받아 하나로 뭉칠 수 있으며,

    이는 기능을 더욱 세분화해서 유지보수에 더 유용합니다.

     

    간단하게 복합기를 예로 들어 다중 상속에 대한 개념을 아래의 코드에서 알아보겠습니다.

    interface Printable{
    	int INK = 100;
    	void print();
    }
    
    interface Scannerable{ void scan(); }
    
    interface Faxable{
    	String FAX_NO = "010-12345";
    	void send(String tel);
    	void receive(String tel);
    }

    복합기는 프린트와 스캔, 팩스 기능이 포함된 기기입니다.

     

    그 기능 3가지를 인터페이스로 선언해준 뒤 아래와 같이 Complexerable로 그 3가지를 다중 상속받습니다.

    interface Complexerable extends Printable, Scannerable, Faxable{ }

     

    이제 인터페이스는 준비되었으니 클래스로 구현을 해줍니다.

     

    인터페이스의 메소드는 추상메소드이기 때문에 빠짐없이 구현하도록 합니다.

    class Complexer implements Complexerable{
    	int ink;
    	Complexer(){ ink = INK; }
    	public void print() { System.out.println("종이에 출력합니다. 남은 잉크량 : " + --ink); }
    	public void scan() { System.out.println("이미지를 스캔합니다."); }
    	public void send(String tel) { 
        	System.out.println(FAX_NO + "에서 "+ tel + "번호로 FAX를 전송");
    	}
    	public void receive(String tel) {
    		System.out.println(tel + "에서 " + FAX_NO + "로 FAX를 수신");
    	}
    }

     

    이로써 3가지 기능을 가진 인터페이스를 복합기가 다중 상속받고 클래스로 구현이 완료되었습니다.

     

    마지막으로 인터페이스 사용 시의 장점 3가지입니다.

    • 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능합니다.
    • 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있습니다.
    • 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능합니다.

     

    출처: https://lasbe.tistory.com/56 [LasBe's Upgrade:티스토리]

    728x90
    반응형

    'Spring > Model1 _2(MVC)' 카테고리의 다른 글

    0930 JSP - (MVC) Filter  (0) 2022.09.30
    0930 JSP - (MVC) BoardDTO , BoardDAO 생성  (2) 2022.09.30
    0930 JSP - Lombok  (0) 2022.09.30
    0929 JSP - (MVC) 모델2, MVC 패턴  (0) 2022.09.29
    0929 JSP - jstl 커스텀 액션  (0) 2022.09.29