인터페이스
인터페이스는 클래스랑 다름
인터페이스는 개체화 불가, 규격만 가지고 있는 껍데기형태임
상속받는다가 아니라 구현받는다고 표현함
추상메서드를 기본으로 하고있음
인터페이스는 다중구현 가능(구현은 여러가지 있을 수 있음)
---
인터페이스 2개 만들어준 다음 이 인터페이스를 구현받는 클래스를 만들어(만들때 인터페이스 추가해줘
그다음 그 클래스의 return값에 값넣어줘
//인터페이스
package kr.co.web.model;
public interface Attack {
public String normal();
public String special();
}
package kr.co.web.model;
public class Character implements Attack, Defense {
@Override
public String block() {
// TODO Auto-generated method stub
return "캐릭터가 공격을 막아낸다";
}
@Override
public String avoid() {
// TODO Auto-generated method stub
return "캐릭터가 공격을 회피한다";
}
@Override
public String normal() {
// TODO Auto-generated method stub
return "캐릭터가 일반 공격을 한다";
}
@Override
public void special() {
// TODO Auto-generated method stub
}
}
인터페이스를 구현받은 클래스에서 변경이 필요한 경우(데이터타입 등) 인터페이스도 함께 수정해줘야한다
-> 소규모 프로젝트에서는 불필요한 작업이 된다, 하지만 규격을 사용하는 클래스가 많은 대형 프젝에서는 유용하다
왜 대형프젝에서 유용한지?? special 인터페이스를 고쳤어 규격하고 안맞는 놈들다 빨간줄들어옴 -> 일일히 오류를 찾는 것보다 훨씬 유용함
1000개의 클래스에서 special 메서드를 300개 클래스가 사용한다고 가정해보자, 만약 인터페이스를 구현받지 않은 각각의 메서드라면 어떻게 찾아고칠 것인가?->인터페이스를 고치면 규격에 맞지않은, 해당 메서드를 구현받은 클래스에 빨간줄이 가기 때문에 훨씬 찾기 쉬움!
인터페이스 만들어놓고, 그 인터페이스 적용해서 클래스도 하나 만들고(거기에 return값 적고)
index 만들어서 화면에 보이는거 만들어줘 (form action="" 등등)
index는 mvc패턴의 요청흐름이 어떤지 보려고하는것
익명객체
디펜스라는 인터페이스가 사용될수 있으려면 클래스가 필요한데 잠깐만 필요한거임 객체화할 때만!
그래서 임시클래스를 만든거임 그래서 클래스가 이름이 없다고 한거임
객체화할 때 반드시 클래스가 있어야 하지만 현재는 임시로 객체를 생성한다
그런데 그 클래스의 이름이 없다(임시로 만들고 사라져버려서
->한군데서 쓸 때는 상관없는데 여러군데서 쓰면 비효율적임
장점 : 클래스를 따로 만들 필요가 없다
index에서 할 일
<body>사이에 화면에 띄울 서식 만들기 (ex <form action="">, <select>, <option><button onclick="go()" 등 이용)
<body>
<form action="">
액션 선택 :
<select id="action">
<option value="attack">공격</option>
<option value="deffense">방어</option>
</select>
종류 :
<select name="class">
<option value="normal">일반공격</option>
<option value="special">특수공격</option>
</select>
<button type="button" onclick="go()">전송</button>
</form>
<h3>${msg}</h3>
</body>
<script>사이에 go()함수만들어주고 action 선택시 class가 달라지길 원한다면 $('#aciton')에 change 이벤트 걸기
<script>
/*action선택시 attack을 선택한 경우
<option value="normal">일반공격</option>
<option value="special">특수공격</option>
가 나타나고, deffense 선택시
<option value="avoid">회피</option>
<option value="block">막기</option>
가 나타난다
*/
//1. id="action"에 이벤트 생성 (이럴땐 change 활용)
$('#action').on('change',function(){
//2. 이벤트 발생시 name="class"에 option 추가
var content ='';
if($(this).val() == 'attack'){
content = '<option value="normal">일반공격</option>';
content +='<option value="special">특수공격</option>';
}else{
content = '<option value="avoid">회피</option>';
content +='<option value="block">막기</option>';
}
$('select[name="class"]').html(content);
});
function go() {
var action = $('#action').val();
$('form').attr('action',action);
$('form').submit();
}
</script>
익명=구현받는 클래스가 없다
interface끼리 상속도 가능하다 (다중상속도 가능함
클래스는 하나씩 상속받아야함 , 근데 인터페이스는 클래스가 아닌 규격의 형태이기 때문에 2개를 동시에 받아올 수도 있음
name으로 주는 이유 : 파라메터로 써먹기 위해
button의 type을 button이라고 주는 이유 :
controller에서 클래스를 객체화하는 이유 : 인터페이스는 스스로 객체화하지 않기 때문에 인터페이스를 구현해줄 클래스가 필요하다
dispatcher를 통해 index.jsp쪽으로 보낸다
forward라는 메서드로 request객체와 response객체를 함께 보내준다
'Spring' 카테고리의 다른 글
국비코딩 Mar02 | 값이 아니라 주소가 뜰 때, mvc 패턴 흐름 정리 (0) | 2023.03.02 |
---|---|
국비코딩 Feb28 | MVC 패턴 중 헷갈리는 부분, 추상화 장점, 다형성 (0) | 2023.02.28 |
국비코딩 Feb24 | 추상화, 인터페이스 (0) | 2023.02.27 |
국비코딩 Feb23 | 디자인패턴, MVC, 상속 (0) | 2023.02.27 |
국비 코딩 Feb22 | Scope, action tag, EL TAG, java beans (0) | 2023.02.22 |