Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

기록

day 0522 인터페이스 본문

📖

day 0522 인터페이스

슈슈파나 2024. 5. 22. 17:02

아침뷰터 앞반이랑 영타연습 대회가 열렸다 빠밤 ~~~ 

나눈 초밥이라서 염탐ㅁ하러다녔다 ㅎ 학원이 끝날땐 300타가 되야지,,

 

/*
PROGRAMMING 9.
마트에서 판매되는 물건을 클래스 Product로 나타내자.
Product 클래스에서 상속받아서 할인 물건을 나타내는 DiscountProduct 클래스를 작성할 수 있다.
1) Product 클래스는 물건의 이름(name)과 가격(price)를 필드로 가지고 있다.
   또한 현재 물건의 가격을 계산하는 getPrice() 메소드를 가지고 있다.
   Product 클래스를 구현하고 테스트하여 보자. 생성자와 필드에 대한 설정자와 접근자를 작성하라.
   toString()에서 물건의 이름과 가격을 출력한다.
2)
3)
*/
package com.kosta.exam01;

public class Product {
	protected String name;
	protected int price;

	@Override
	public String toString() {
		return "Product [name=" + name + ", price=" + price + "]";
	}

	public Product() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Product(String name, int price) {
		super();
		this.name = name;
		this.price = price;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}
package com.kosta.exam01;

public class DiscountProduct extends Product {
	private double rate;

	@Override
	public int getPrice() {
		// 상품가격 - 할인가격
		return price - (int)(price * rate);
	}

	@Override
	public String toString() {
		return "DiscountProduct [rate=" + rate + ", name=" + name + ", price=" + price + "]";
	}

	public DiscountProduct() {
		super();
		// TODO Auto-generated constructor stub
	}

	public DiscountProduct(String name, int price, double rate) {
		super(name, price);
		this.rate = rate;
	}

	public double getRate() {
		return rate;
	}

	public void setRate(double rate) {
		this.rate = rate;
	}
}
package com.kosta.exam01;

public class ProductTest {

	public static void main(String[] args) {
		Product p1 = new Product("toothbrush", 3000);
		Product p2 = new DiscountProduct("toothbrsh", 3000, 0.15);
		
		System.out.println(p1.getPrice());
		System.out.println(p2.getPrice());
	}
}

 

/equals/

package com.kosta.exam02;

public class Person {
	private String name;
	private int age;

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
}
package com.kosta.exam02;

public class EqualsTest {

	public static void main(String[] args) {
		Person p1 = new Person("이름2", 20);
			Person p2 = new Person("이름2", 20);
			
			System.out.println(p1);
			System.out.println(p2);
			
			/* 
			객체참조 변수는 값을 갖고 있는 것이 아니라 값이있는 객체
			즉, 메모리를 참조하고 있기 때문에 
			p1이 참조하고 있는 객체 p2가 참조하고 있는 개체가 서로 달라요
			
			만약에 두 객체가 서로 동일한 속성값을 갖고 있는지 판별하려면
			자바의 제일 조상클래스(object)의 equals 메소드를
			자신에게 맞도록 재정의(오버라이딩) 해야 합니다.
			 */
			if(p1 == p2) {
				System.out.println("같아요");
			}else {
				System.out.println("달라요");
			}
	}
}

package com.kosta.exam03;

public class Person {
	private String name;
	private int age;

	public boolean equals(Object obj) {
		boolean re = false;
		Person p = (Person)obj;
		if(name.equals(p.name) && age == p.age) {
			re = true;
		}
		return re;
	}
// equals 재정의 
if(p1.equals(p2)) {
    System.out.println("같아요");
}else {
    System.out.println("달라요");
}

 

/자동으로 equals 하는 방법/

@Override
public int hashCode() {
    return Objects.hash(age, name);
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Person other = (Person) obj;
    return age == other.age && Objects.equals(name, other.name);
}

눈 잠깐 감았다 떴눈데 ,, 코드가 길어서ㅓ 놀램,,, 자동완성이었ㄷㅏ,,,,

 

/*
PROGRAMMING 10.
책을 대여해주는 업체를 위한 Book이라는 클래스를 작성한다.
Book은 관리번호(number), 제목(title), 저자(author)를 필드로 가진다.

*/
package com.kosta.exam05;

// 추상 메소드 abstract
public abstract class Book {
	protected String number; // 관리번호
	protected String title; // 제목
	protected String author; // 저자
	
	// getLateFees() 메소드를 재정의한다(연체일수) ==> Book에 있어야한다, get이기 때문에 int로 반환한다
	// 내용을 구체화 할 수 없기때문에 추상 메소드(abstract)로 만든다 {body}는 만들지 않는다 책임전가 !
	public abstract  int getLateFees(int days);
	
	// equals() 재정의 하기, 관리번호가 동일하면 동일한 책을 간주한다
	public boolean equals(Object obj) {
		boolean re = false;
		// 형변환해서 number로 접근하기
		Book b = (Book)obj;
		if(number.equals(b.number)) {
			re = true;
		}
		return re;
	}
	
	@Override
	public String toString() {
		return "Book [number=" + number + ", title=" + title + ", author=" + author + "]";
	}

	public Book() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Book(String number, String title, String author) {
		super();
		this.number = number;
		this.title = title;
		this.author = author;
	}

	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
}
package com.kosta.exam05;

public class Novel extends Book {

	@Override
	public int getLateFees(int days) {
		return 300 * days;
	}

	@Override
	public String toString() {
		return "Novel [number=" + number + ", title=" + title + ", author=" + author + "]";
	}

	public Novel() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Novel(String number, String title, String author) {
		super(number, title, author);
		// TODO Auto-generated constructor stub
	}
}
package com.kosta.exam05;

public class Poet extends Book {

	@Override
	public int getLateFees(int days) {
		return 200 * days;
	}

	@Override
	public String toString() {
		return "Poet [number=" + number + ", title=" + title + ", author=" + author + "]";
	}

	public Poet() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Poet(String number, String title, String author) {
		super(number, title, author);
		// TODO Auto-generated constructor stub
	}
}
package com.kosta.exam05;

public class ScienceFiction extends Book {

	@Override
	public int getLateFees(int days) {
		return 600 * days;
	}

	@Override
	public String toString() {
		return "ScienceFiction [number=" + number + ", title=" + title + ", author=" + author + "]";
	}

	public ScienceFiction() {
		super();
		// TODO Auto-generated constructor stub
	}

	public ScienceFiction(String number, String title, String author) {
		super(number, title, author);
		// TODO Auto-generated constructor stub
	}
}
package com.kosta.exam05;

public class BookTest {

	public static void main(String[] args) {
		// 추상 클래스의 객체는 생성할 수 없다
		// Book b = new Book();
		
		Book b1 = new Novel("N001", "제목1", "저자1");
		
		Book b2 = new Poet();
		b2.setNumber("P001");
		b2.setTitle("제목2");
		b2.setAuthor("저자2");
		
		Book b3 = new ScienceFiction("P001", "제목3", "저자3");
		Book b4 = new Poet("P002", "제목4", "저자4");
		Book b5 = new Poet("S001", "제목5", "저자5");
		
		if(b2.equals(b3)) {
			System.out.println("같은 책 입니다.");
		}else {
		System.out.println("다른 책 입니다.");
		}
		System.out.println("===========");
		
		if(b2.equals(b4)) {
			System.out.println("같은 책 입니다.");
		}else {
			System.out.println("다른 책 입니다.");
		}
		System.out.println("===========");
		System.out.println("b1의 연체료 : " + b1.getLateFees(2));
		System.out.println("b2의 연체료 : " + b2.getLateFees(2));
		System.out.println("b3의 연체료 : " + b3.getLateFees(2));
		System.out.println("b3의 연체료 : " + b4.getLateFees(2));
		System.out.println("b3의 연체료 : " + b5.getLateFees(2));
	}
}

 

상속관계에 있을 때 부모클래스의 참조변수가 자식클래스의 객체를 참조할 수 있어요

 

이때 참조변수로

- 부모클래스에는 있고 자식클래스에는 없는 메소드를 호출 할 수 있어요

- 부모클래스에도 있고 자식클래스에도 있는 메소드를 호출하면 자식클래스에 있는 메소드가 동작합니다

- 부모클래스에는 없고 자식클래스에 있는 메소드를 호출하려면 자식클래스로 형변환 한 후에 호출해야 합니다

package com.kosta.exam06;

abstract class Book{
	// body 추상화
	// 부모클래스에 없을 경우 해당 객체로 형변환해서 사용한다 instanceof
	public abstract  int getLateFees(int days);
	// body 구체화
	public void pro() {}
}

class Novel extends Book{
	@Override
	public int getLateFees(int days) {
		// TODO Auto-generated method stub
		return days * 300;
	}
}

class Poet extends Book{
	@Override
	public int getLateFees(int days) {
		// TODO Auto-generated method stub
		return days * 200;
	}
}

public class BookTest {
	public static void main(String[] args) {
		// 부모클래스가 자식클래스를 참조 할 수 있다 (자료형 Book, 객체 Novel)
		Book b1 = new Novel();
		Book b2 = new Poet();
		// 부모클래스에서 pro();를 찾아서 쓴다
		b1.pro();
		b2.pro();
		// 재정의 된 메소드
		b1.getLateFees(1);
		b2.getLateFees(1);
	}
}

 


 

14:00 ~ 

 

인터페이스

: 인터페이스도 클래스처럼 새로운 자료형을 만들기위한 것 입니다

  클래스는 다중상속이 되지 않습니다

  만약 다중상속의 효과를 기대하려면 인터페이스를 이용합니다

  인터페이스는 완전추상의 개념으로

  인터페이스의 추상메소드와 상수만으로 구성되어야 합니다

  

<< 클래스 만드는 방법 >>

class 클래스명{
  멤버변수
  멤버메소드
  상수
  생성자
  클래스변수
  클래수메소드
  추상메소드
}

 

<< 인터페이스 만드는 방법 >>

interface 클래스명{
  상수
  추상메소드(반드시 있어야함)
}

 

<< 추상클래스의 사용 >>

abstract class A{
  piblic abstract void pro();
  // 바디가 구체화 된 
  public void hello(){
  }
}

class B extends A{
  public void pro(){
  }
}

 

<< 인터페이스의 사용 >>

interface A{
  public void pro();
}

interface K{
  public void hello();
}

class B implements A,K{
  public void pro(){
  }
  public void hello()[
  }
}

 

<< 한개의 클래스로부터 상속받고 여러개의 인터페이스 구현하기 >>

class A{
}

interface B{
}

interface C{
}

interface D{
}

class my extends A implements B,C,D
}

package com.kosta.exam07;

public interface A {
	// 자동 final
	public int YEAR = 2024; 
	
	// {body} 적으면 error
	public void pro();
}
package com.kosta.exam07;

public interface B {
	public String title = "hello JAVA";
	public void hello();
}
package com.kosta.exam07;

public class My implements A, B {
	public void pro() {
		
	}
	public void hello() {
		
	}
}

package com.kosta.exam07;

public class My2 implements A, B {

	@Override
	public void hello() {
		// TODO Auto-generated method stub

	}

	@Override
	public void pro() {
		// TODO Auto-generated method stub

	}
}
package com.kosta.exam07;

public class interfaceTest {

	public static void main(String[] args) {

		My2 ob = new My2();
		ob.pro();
		ob.hello();
		System.out.println(ob.YEAR);
		System.out.println(ob.TITLE);
	}
}

 

/새로운 interface 만들기/

package com.kosta.exam07;

public class Koste {
	public void study() {
		System.out.println("study를 합니다.");
	}
}

/클래스1 + 인터페이스2 추가/

package com.kosta.exam07;

public class My3 extends Koste implements A, B {

	@Override
	public void hello() {
		System.out.println("hello 입니다.");
	}

	@Override
	public void pro() {
		System.out.println("pro 입니다.");
	}

}
package com.kosta.exam07;

public class My3Test {

	public static void main(String[] args) {
		My3 ob = new My3();
		ob.study();
		ob.hello();
		ob.pro();
	}
}

// 창(윈도우)을 표현하기 위한 클래스

class Frame{

}

 

// 마우스 움직임기능을 갖고 있는 인터페이스

interface MouseListener{

  public void mousePreess();

  public void mouseRelease(); 

  public void mouseClick();

  ...

}

// 키보드 움직임 기능을 갖고 있는 인터페이스

interface KeyListener{

  public void keyPress();

  public void keyRelease();

}

 

// 만약 창이면서 마우스 움직임 기능과 키보드 움직임 기능을 구현하려면 다음과 같이 클래스를 만들 수 있어요

class Grimpan extends Frame, implements MouseListener, KeyLister...{

}

 

==> 자바는 이미 창(윈도우)에 대한 클래스를 Frame이라는 이름으로 만들어 두었습니다.

또 마우스 움직임 기능을 위한 클래스와 키보드 움직임과 관련한 인터페이스를

MouseListener, KeyListener 라는 이름으로 이미 만들어 두었습니다.

 

cui : Character User Interface

==> 컴퓨터와 사용자가 문자(명령어)로 의사소통하는 환경

 

gui : Graphic User Interfece

==> 컴퓨터에 사용자가 그래픽으로 의사소통하는 환경

 

자바는 gui와 관련하여 java.awt 패키지에 관련 클래스와 인터페이스를 제공합니다

 

package com.kosta.exam08;

import java.awt.Frame;

public class FrameTest {

	public static void main(String[] args) {
		Frame f = new Frame("우리반 반장은.. 나..");
		System.out.println("창을 만들었어요.");
	
		f.setSize(400, 300);
		System.out.println("창의 크기를 설정했어요.");
		
		f.setVisible(true);
		System.out.println("창이 보여요.");
	}
}

 

/java.awt.event/

 

Java Platform SE 8

 

docs.oracle.com

/마우스 일처리 담당/

 

package com.kosta.exam08;

import java.awt.Frame;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

class MyFrame extends Frame implements MouseListener{
	public MyFrame(String title) {
		super(title);
		setSize(300, 200);
		setVisible(true);
		
		// 마우스 일처리 담당자를 등록합니다
		addMouseListener(this);
	}
	
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("마우스 클릭");
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("마우스 누름");
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("마우스 떼짐");
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("마우스 들어옴");
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println("마우스 나감");
	}
}

public class FrameTest02 {

	public static void main(String[] args) {
		// MyFrame f = new MyFrame("MouseTest");
		new MyFrame("hello java");
	}
}

 

/EXERCISE/

2) AudioSystem 클래스 정의의 첫 번째 문장만을 쓰시오. AudioSystem은 SoundSystem을 확장하고
   MP3playable 인터페이스와 TurnTablePalyable 인터페이스를 구현한다.
   
class AudioSystem extends SoundSystem implements MP3playable, TurnTablePalyable{
}
4) 추상 메소드 sound()를 가지고 있는 추상 클래스 Bird를 작성하고
   Bird를 상속받아서 Dove 클래스를 작성하라.
   Dove 클래스의 sound()에서는 "coo coo"를 출력한다.
   
package com.kosta.exam08;

abstract class Bird{
	public abstract void sound();
}

class Dove extends Bird{
	@Override
	public void sound() {
		System.out.println("coo coo");
	}
}

public class BirdTest {
	public static void main(String[] args) {
		Bird b = new Dove();
		b.sound();
	}
}

 

- 오늘 학습내용에 대하여 요약 및 정리하고 궁금한 점 질문합니다

- 요약 및 정리가 끝난 사람들은 다음에 대하여 찾아보고 예제를 만들어 슬랙에 제출합니다

  메소드명 앞에 final

  클래스명 앞에 final