onnnzeoz
article thumbnail

인터페이스

인터페이스는 클래스랑 다름

인터페이스는 개체화 불가, 규격만 가지고 있는 껍데기형태임

상속받는다가 아니라 구현받는다고 표현함

추상메서드를 기본으로 하고있음

 

인터페이스는 다중구현 가능(구현은 여러가지 있을 수 있음)

 

---

인터페이스 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객체를 함께 보내준다

profile

onnnzeoz

@onnnzeoz

비전공자의 개발 공부 일지입니다 💦 국비 풀스택 과정 수강중