데일리로그C:
article thumbnail

<1교시>

추상클래스(=부모클래스)

  --> 상속용

  --> public abstract class 클래스명 { } 

  --> new 연산자로 객체 직접 생성 불가능 ( A a = new A() ; ) 

  --> 용도 : 1) 공통된 필드와 메소드의 이름 통일  2) 실체 클래스 작성 시간 절약

 

실체클래스(=자식클래스)

  --> 모든 필드, 메소드 물려받음

 

[p360~361 예제]    ex06

package ex06;

public abstract class Phone {  // 추상클래스

	//필드
	String owner;
	
	
	// 생성자
	public Phone(String owner) {
		this.owner = owner;
	}
	
	
	//메소드
	public void turnOn() {
		System.out.println("전원을 켠다");
	}
	
	public void turnOff() {
		System.out.println("전원을 끈다");
	}
	
	public abstract void sound(); // 오류(재정의가 없기때문에)
}

 

package ex06;

public class SmartPhone extends Phone {

	
	//생성자
	public SmartPhone(String owner) {  // 매개변수 1개를 이용한 생성자
		super(owner);  // 부모생성자의 영향을 받아.. 매개변수 1개 처리
	}
	
	
	//메소드
	public void internetSearch() {
		System.out.println("인터넷 검색");
	}
	
	
	@Override
	public void sound() {
		// TODO Auto-generated method stub
		
	}
}

 

package ex06;

public class Test {

	public static void main(String[] args) {
    	//Phone p = new Phone; 불가능!
    
		SmartPhone s = new SmartPhone("홍길동");
		
		s.turnOn();
		s.internetSearch();
		s.turnOff();
	}
}


/* 출력
전원을 켠다
인터넷 검색
전원을 끈다
*/

 

 

추상메소드

  --> 추상 클래스에서만 선언 가능

  --> 무조건 상속받아야함!!  : 자식클래스에서 재정의(source > override

  --> 할아버지, 아버지, 자식 :  아버지가 상속 안받으면  자식에게 물려줄수있음 

                                                (할아버지 - 추상클래스, 아버지 - 추상클래스, 자식 - 재정의 ) 

[p3363~365 예제] 

package ex07;

public abstract class A {  // 추상클래스

	String kind = "포유류"; // 생성자에 초기화 아니어도 이렇게 초기화도 가능(else 구문)
	
	public void breathe() {
		System.out.println("숨을 쉰다");
	}
	
	public abstract void sound(); // 추상 메소드 (실행영역 만들지 X --> 재정의 해야하므로)
}

 

package ex07;

public class D extends A {

	// 생성자
	public D() {
		// this.kind = "포유류";
	}

	
	// 메소드
	@Override
	public void sound() {  // 재정의
		System.out.println("멍멍");
		
	}

}

 

package ex07;

public class C extends A {

	// 생성자
		public C() {
			// this.kind = "포유류";
		}

		
		// 메소드
		@Override
		public void sound() {  // 재정의
			System.out.println("야옹");
			
		}
}

 

package ex07;

public class E extends A {

	//생성자
	public E() {
		this.kind = "양서류";  // if구문
	}

	
	//메소드
	@Override
	public void sound() {
		System.out.println("개굴");
		
	}
	
	
	
}

 

package ex07;

public class Test {

	public static void main(String[] args) {  // 메인메소드
		D d = new D(); // 자식클래스로 자식 생성자
		C c = new C(); // 자식클래스로 자식 생성자
		E e = new E(); // 자식클래스로 자식 생성자
		
		d.sound();
		c.sound();
		e.sound();
		System.out.println("==========");
		
		
		// 자동타입변환
		A a; // 초기화
		a = new D(); // 부모 A클래스로 자식 생성
		System.out.println(a.kind);
		a.sound();
		
		a = new C(); // 업데이트
		a.sound();
		
		a = new E(); // 업데이트
		System.out.println(a.kind);
		a.sound();
		System.out.println("==========");
		
		// 메소드 다형성
		animalSound(new D());
		animalSound(new C());

	}
	
	public static void animalSound(A a) {  // 부모 a로 해서 자식 D,C,E 다 가능하게
		a.sound();
	}

}

 

 

[p367 Q03]

package ex07;

public abstract class HttpServlet {  // 추상클래스

	public abstract void service();  // 추상메소드
}
package ex07;

public class Login extends HttpServlet{

	@Override
	public void service() {
		System.out.println("로그인합니다");
		
	}
}
package ex07;

public class File extends HttpServlet {

	@Override
	public void service() {
		System.out.println("파일다운로드합니다");
	}
}
package ex07;

public class HttpTest {

	public static void main(String[] args) {
		method(new Login());  // 로그인 (자식)
		method(new File());  // 파일 다운로드 (자식)
	}
	
	public static void method(HttpServlet s) {
		s.service();
	}
}

 

 

<2교시>

인터페이스(interface)    * project3에서 사용

  --> 객체의 사용 방법을 정의한 타입

  --> 선언 : public interface 이름 {  }     *  interface 파일 열면 됨

  --> 멤버 : 상수(=변수와 동일)필드, 추상메소드

interface 이름 {
       [public static final  생략] 타입(int 등)  상수이름 = 값;  // 이름은 무조건 대문자 

       타입(리턴) 메소드이름 (매개변수... );
}

  --> 모든 요소들을 재정의 해야함 (why? 인터페이스는 상속받기 위해 사용되므로)

 

클래스 - 클래스 상속 (= 친가)  

  ㄴ>  extends   ( Class A - B - C )     // 단 하나만 상속

 

클래스 - 인터페이스 상속 (= 외가)

   ㄴ>  implements ( Interface AA - BB - CC )   // 여러개 상속 가능

 

인터페이스 - 인터페이스 상속

  ㄴ> interface 하위인터 extends  상위인터1,2 ...  (p399)

 

 

[p373~376 예제]

package ex01;

public interface RemoteControl {

	//인터페이스에서 변수는 상수가 됨
	public int MAX_VOLUME = 10;
	public int MIN_VOLUME = 0;
	
	// 인터페이스에서 메소드는 추상메소드가 됨
	public void trunOn();
	public void trunOff();
	public void setVolume(int v);
	
	
}

 

package ex01;

public class T implements RemoteControl {

	// 필드
	private int volume; // 전역변수 (내꺼) (T클래스에서만 사용할수있음)
	  // 다른 클래스에서 사용하려면 setter getter 써야함
	
	
	
	// 메소드 (부모꺼)
	@Override
	public void trunOn() {
		System.out.println("티비 켜다");
		
	}

	@Override
	public void trunOff() {
		System.out.println("티비 끄다");
		
	}

	@Override
	public void setVolume(int v) {  // 물려받은 set
		if(v > RemoteControl.MAX_VOLUME) {
			this.volume = RemoteControl.MAX_VOLUME;  // 볼륨 10까지가 최대
			
		} else if(v < RemoteControl.MIN_VOLUME) {
			this.volume = RemoteControl.MIN_VOLUME;  // 볼륨 0으로 최소 처리
			
		} else {
			this.volume = volume;
		}
		System.out.println("현재 티비 볼륨: " + this.volume);
			
	}

}

 

package ex01;

public class A implements RemoteControl {

	// 필드
	private int volume;
	
	//메소드
	@Override
	public void trunOn() {
		System.out.println("오디오 켜다");
		
	}

	@Override
	public void trunOff() {
		System.out.println("오디오 끄다");
		
	}

	@Override
	public void setVolume(int v) {  // 물려받은 set
		if(v > RemoteControl.MAX_VOLUME) {
			this.volume = RemoteControl.MAX_VOLUME;  // 볼륨 10까지가 최대
			
		} else if(v < RemoteControl.MIN_VOLUME) {
			this.volume = RemoteControl.MIN_VOLUME;  // 볼륨 0으로 최소 처리
			
		} else {
			this.volume = v;
		}
		System.out.println("현재 오디오 볼륨: " + this.volume);
			
	}
	
	
}

 

package ex01;

public class Test {

	public static void main(String[] args) {
		RemoteControl r;  // 선언만
		
		r = new T();
		r.trunOn();
		r.setVolume(11); // MAX 값(10) 적용
		r.trunOff();
		
		System.out.println("================");
		r = new A();
		r.trunOn();
		r.setVolume(5);
		r.trunOff();

	}

}

 

<3교시>

다중 인터페이스

  --> 형식: public class 클래스이름 implements 인터페이스1, 인터페이스2 {   } 

 

[p378 위 예제 이어서 사용]

package ex01;

public class T  implements RemoteControl, Searchable { // 외할아버지, 외할머니

	// 필드
	private int volume; // 전역변수 (내꺼) (T클래스에서만 사용할수있음)
	  // 다른 클래스에서 사용하려면 setter getter 써야함
	
	
	
	// 메소드 (부모꺼)
	@Override
	public void trunOn() {
		System.out.println("티비 켜다");
		
	}

	@Override
	public void trunOff() {
		System.out.println("티비 끄다");
		
	}

	@Override
	public void setVolume(int v) {  // 물려받은 set
		if(v > RemoteControl.MAX_VOLUME) {
			this.volume = RemoteControl.MAX_VOLUME;  // 볼륨 10까지가 최대
			
		} else if(v < RemoteControl.MIN_VOLUME) {
			this.volume = RemoteControl.MIN_VOLUME;  // 볼륨 0으로 최소 처리
			
		} else {
			this.volume = volume;
		}
		System.out.println("현재 티비 볼륨: " + this.volume);
			
	}

	@Override
	public void search(String url) {
		System.out.println(url + "을 검색합니다");
		
	}
	

}

 

package ex01;

public interface Searchable {

	void search(String url);
}

 

package ex01;

public class Test {

	public static void main(String[] args) {
		RemoteControl r;  // 선언만(외할아버지로부터)
		Searchable s; // 선언만(외할머니로부터)
		
		r = new T();
		r.trunOn();
		r.setVolume(11); // MAX 값(10) 적용
		
		s = new T();
		s.search("mbc");
		r.trunOff();
		
		System.out.println("================");
		////////////
		T t = new T(); // 자식 클래스 타입으로 자식 생성자
		t.trunOn();
		t.setVolume(4);
		t.search("tvn");
		t.trunOff();
		
		System.out.println("================");
		
		r = new A();
		r.trunOn();
		r.setVolume(5);
		r.trunOff();

	}

}

 

[p385 Q03]

package ex02;

public interface Soundable {

	// 타입마다 자식클래스에 어떻게 적어야하는지 구분하기!
	String sound();
	void sound2(); 
	int sound3();  // 1 = 야옹 2 = 멍멍
}

 

package ex02;

public class Cat implements Soundable {

	
	
	@Override
	public String sound() {  // String 이므로 return있어야함
		return "야옹";
	}

	@Override
	public void sound2() {
		System.out.println("야옹");
		
	}

	@Override
	public int sound3() {
			return  1;
		
		
	}
}

 

package ex02;

public class Dog implements Soundable {

	@Override
	public String sound() {
		return "멍멍";
	}

	@Override
	public void sound2() {
		System.out.println("멍멍");
		
	}

	@Override
	public int sound3() {
		return 2;
	}

	
	
}

 

package ex02;

public class Test {

	public static void main(String[] args) {
		printSound(new Cat());
		printSound(new Dog());
		
		printSound2(new Cat());
		printSound2(new Dog());
		
		printSound3(new Cat());
		printSound3(new Dog());
	}
	
	
	private static void printSound(Soundable s) {
		System.out.println(s.sound());
	}
	

	private static void printSound2(Soundable s) {
		s.sound2();  	
	}
	
	private static void printSound3(Soundable s) {
		// int num = s.sound3();
		if(s.sound3() == 1) {  // num == 1
			System.out.println("야옹");
		} else {
			System.out.println("멍멍");
		}
	}
	
 

}

 

<4교시>

[p389~390 예제]

package ex03;

public interface Tire {

	void roll();
}

 

package ex03;

public class H implements Tire {

	@Override
	public void roll() {
		System.out.println("한국타이어 굴러간당");
		
	}

	
}

 

package ex03;

public class K implements Tire {

	@Override
	public void roll() {
		System.out.println("금호타이어 굴러간당");
		
	}

	
}

 

package ex03;

public class Car {

	Tire fl = new H();  // 앞왼
	Tire fr = new H();  // 앞오
	Tire bl = new K();  // 뒤왼
	Tire br = new K();  // 뒤오
	
	void run() {
		fl.roll();
		fr.roll();
		bl.roll();
		br.roll();
	}
}

 

package ex03;

public class Test {

	public static void main(String[] args) {
		Car c = new Car();  // 객체 생성(차 뽑음)
		
		c.run();
		

		c.bl = new H(); // 뒤왼을 한국타이어로 교체
		
		System.out.println("=====교체=====");
		c.run();  

	}

}

 

 

다형성 : 부모클래스 타입으로 받겠다는 의미

 

[p393~394 예제]

package ex04;

public interface Vehicle { // 부모

	void run();  // 추상메소드
}

 

package ex04;

public class Bus implements Vehicle { // 자식

	
	@Override
	public void run() {
		System.out.println("버스가 달립니다");
		
	}

}

 

package ex04;

public class Taxi implements Vehicle {  // 자식

	@Override
	public void run() {
		System.out.println("택시가 달립니다");
		
	}
}

 

package ex04;

public class Driver {  // 운전자는 자식 중 선택

	public void drive(Vehicle v) { // 매개변수 이용
		v.run();
	}
}

 

package ex04;

public class Test {

	public static void main(String[] args) {
		Vehicle v = new Bus(); // 부모 인터페이스 타입으로 자식 생성자
		Vehicle v2 = new Taxi(); // 부모 인터페이스 타입으로 자식 생성자
		
		v.run();
		v2.run();
		
		////////////////////////////////////
		Driver d = new Driver();
		System.out.println("===========");
		d.drive(v);
		d.drive(v2);
		
		////////////////////////////////////
		drive3(v);
		
	}
	
	public static void drive3(Vehicle v) {  // Test클래스에서만 사용할 수 있음
		System.out.println("===========");
		v.run();
	}
}

 

[p395~936 위 예제 이어서 사용]

package ex04;

public interface Vehicle { // 부모

	void run();  // 추상메소드
}

 

package ex04;

public class Bus implements Vehicle { // 자식

	
	@Override
	public void run() {
		System.out.println("버스가 달립니다");
		
	}
	
	public void checkFare() {
		System.out.println("승차요금을 체크합니다");
	}

}

 

package ex04;

public class Test {

	public static void main(String[] args) {
		Vehicle v = new Bus(); // 부모 인터페이스 타입으로 자식 생성자
		Vehicle v2 = new Taxi(); // 부모 인터페이스 타입으로 자식 생성자
		
		Bus b = (Bus)v; // 강제 형변환
		b.checkFare();
		/////////////////////////////////
		
		Bus b1 = new Bus(); 
		b1.run();
		System.out.println("===========");
		b1.checkFare();
		///////////////////////////////////
		
		v.run();
		v2.run();
		
		////////////////////////////////////
		Driver d = new Driver();
		System.out.println("===========");
		d.drive(v);
		d.drive(v2);
		
		////////////////////////////////////
		drive3(v);
		
	}
	
	public static void drive3(Vehicle v) {  // Test클래스에서만 사용할 수 있음
		System.out.println("===========");
		v.run();
	}
}

 

 

[계산기 예제]   ch08 >ex04 > Cal, Four,  T01  

  ㄴ> 여유될 때......

 

<5교시 JSP 준비>

1. 아파치 톰캣 설치 ( https://tomcat.apache.org )  > Server Port : 8005 수정 

2. 이클립스 EE 설치 ( https://www.eclipse.org/ ) > 20년06월껄로

3. 아파치 톰캣, EE 연동

 

EE 사용

1. project 생성 : File > New > Dynamic web project

2. WebContent > 우클릭 > New > JSP file

3. 실행 : test 우클릭 > Runas > 1.Run on Server

       ㄴ> 오류 404 : 파일 없음을 의미

 

<6교시>

WebContent > 우클릭 > New > Folder

 

<7교시>

include : 대표 하나만 수정하면 전부다 수정되게(header, footer에 잘 쓰임)

  ㄴ> 파일로 땡겨올 땐  <%@ include file="/include/이름.jsp" %>

 

css 땡겨올 땐 <link rel="stylesheet" href="/css/basic.css">

 

<8교시>

project1 틀 잡기

'JAVA > jsp' 카테고리의 다른 글

회원가입- 주소 추가하기  (0) 2023.01.19
230116  (0) 2023.01.16
230112_상속, 오버라이딩, 다형성  (0) 2023.01.12
230111_멤버(필,생,메), 오버로딩, 접근제한자  (0) 2023.01.11
230110_참조, 배열, 객체, 필드  (0) 2023.01.10
profile

데일리로그C:

@망밍

포스팅이 도움됐다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...