230223 JAVA_상속_오버라이드

Myung A Lee·2023년 2월 23일
0

JAVA

목록 보기
4/13
post-thumbnail

Java

디자인 패턴

소프트웨어 개발 과정에서 자주 나타나는 구조적인 문제를 해결하는 방식으로 특정한 상황에서 사용할 수 있도록 설계 문제에 대한 해답을 문서화 하기 위해 고안된 방법이다.
주로 대규모 프로그램 개발에 적합하며 디자인 패턴을 잘 사용하려면 유용한 상황이 언제인지 잘 알아야 하며 패턴은 절대적이지 않고 유연하게 변형하여 상용이 가능해야한다.

MVC Patter(Model II)

MVC PatterModel View Controller의 약자로 앱을 세가지 역할로 구분하는 패턴을 의미한다. 각 파트는 자신이 맡은 역할을 수행한다.

  • View : 유저가 요청하거나 요청한 결과를 보여주는 화면
  • Controller : 유저가 요청한 내용을 확인하고 해당 업무를 수행할 Model에게 전달
  • Model : Controller에서 받은 요청을 처리 후 반환하는 역할

기본적으로 MVC 구조는 JSP와 Java가 분리되어야 한다.
View의 역할울 해줄 JSP에서 보내는 내용을
Controller에서 받을 수 있도록 Java 기능이 필요하다.
그렇다면 이 기능을 모두 구현해야할까?

상속 (Inherit)

Java에서는 다른 소스를 가져다 쓰기 위해 객체화(Instance)와 상속(Inherit)을 사용한다. 상속은 OOP의 4대 특징 중 하나이며 다른 사람이 만들어 놓은 코드를 쉽게 사용 할 수 있는 아주 중요한 개념이다.

  • Java에서는 다중상속을 지원하지 않는다.
  • 접근제한자가 Private인 멤버는 상속 받을 수 없다.
package ko.co.web.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//web.xml에서 welcome file list에 파일이 없으면 이쪽으로 와라
@WebServlet("/") // 서버에 접근하면 이 클래스로 와라 
public class MainController extends HttpServlet {

	// get 방식으로 들어오면 이 메서드가 실행 됩니다. 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		System.out.println("GET으로 접근~!!!");
	}

	
	// post 방식으로 들어오면 이 메서드가 실행 됩니다. 
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
	
	}

}
  • extends HttpServlet: 상속을 위해서 사용하는 키워드로 자바는 기본적으로 Class라는 분류의 개념을 기본으로 하기 때문에 상속에서도 확장이라는 extends 키워드를 사용한다.

  • @WebServlet("/") : Web.xml에서 welcome file list에 파일이 없으면 해당 클래스로 접근하도록 하는 의미로 우선순위는 welcome file list이 우선이다.

  • doGet/doPost method : HttpServlet 를 상속했을 때 사용할 수 있는 기능으로 view에서 데이터를 get/post 방식으로 보냈을 때 사용이 가능하다.

상속 사용의 장점

  • 상속 받은 클래스의 멤버를 따로 객체화 하지 않고 쓸 수 있다. (내것 처럼 쓸 수 있다. )
  • 사용자 입장에서 각 기능을 쓰기 위해 어떤 클래스들을 객체화 해야 하는지 일일히 알 필요가 없다.

Super

super 는 부모객체를 의미하는 것으로 super.dopost(req,resp)의 경우 처럼 선언문 안에 선언되어 있다면 부모의 메서드를 그대로 사용하겠다는 의미다.

오버라이드 (Override)

: 부모에게 상속 받은 메서드의 기능이 마음에 들지 않거나 아쉬운 경우에 메서드의 내용을 변경 하는 것.

  • 상속 받은 메서드를 내 맘대로 바꿔 쓸 수 있다.
  • 단, 읽기 전용인(readOnly) final 키워드가 있는 메서드는 상속받아 오버라이드 하는 것이 불가능 하다.
public class MainController extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		// super를 지우면 부모가 준 기능을 버리고 내가 스스로 만들 것이다.
    }
        
    @Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
	
		super.doPost(req, resp); 
		//super == 부모객체
		// 이대로 사용하면 부모의 doPost 메서드를 사용하는 것.
	}
	
}

오버로딩과 오버라이딩은 전혀 상관이 없다.
메서드 오버로딩 : 이름이 같은 메서드를 변수타입과 갯수를 변경하여 새로 정의 하는 것
메서드 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것.

0개의 댓글