0407 Object class

Fifty·2025년 4월 7일

2. JAVA

목록 보기
19/33
post-thumbnail

인터페이스

추상메서드만으로 구성되어 있는 것

추상메서드를 인터페이스를 통해 받으면 구현해줘야한다.

접근제어자 interface 인터페이스이름 {

    public static final 타입 상수이름 = 값;

    ...

    public abstract 메소드이름(매개변수목록);

    ...

}
interface Animal { public abstract void cry(); }

 

class Cat implements Animal {

    public void cry() {

        System.out.println("냐옹냐옹!");

    }

}

 

class Dog implements Animal {

    public void cry() {
           System.out.println("멍멍!");

    }

}

 

public class Polymorphism03 {

    public static void main(String[] args) {

        Cat c = new Cat();

        Dog d = new Dog();

 

        c.cry();

        d.cry();

    }

}

상속과 구현을 동시에 할 수 있습니다.

class 클래스이름 extend 상위클래스이름 implements 인터페이스이름 { ... }


object class

object class가 모든 클래스의 부모다.
너무 당연해서 extends object를 쓰지 않는다.
object class는 모든 타입을 수용할 수 있다.
원시자료형 int, float는 부모가 없다. 그래서 담을 수 있게 Wrapper class가 있다.
int를 감싸고 있는 것이 Integer

		Integer n1 = new Integer(10);
		Integer n2 = Integer.valueOf(10);


Object 타입의 무한배열 만들기

별도로 class B를 만들었는데, 그것도 Object배열에 추가가 가능하다.
Object배열에 B를 넣는 것도 가능하고 B.getS()를 넣는 것도 가능하다.

package ex0407;

import java.util.Scanner;

public class Test {

	static int start = 0;
	public static void main(String[] args) {
		
		Object[] o = new Object[5];
			
		int temp = 0;

		o=inputArr(o,start);
		while(true) {
			printArr(o);
			Scanner sc = new Scanner(System.in);
			System.out.println("배열을 늘리시겠습니까?(Y:0, N:1)");
			temp=sc.nextInt();
			if(temp==0) {
				o = extendArr(o);
				o = inputArr(o, start);
			}
			else{
				System.out.println("종료하겠습니다.");
				break;
			}
		}

	}
	
	public static Object[] extendArr(Object[] o) {
		Object[] o2 = new Object[o.length+5];
		for(int j=0; j<o.length; j++) {
			o2[j]=o[j];
		}
		o=o2;
		start+=5;
		System.out.println("배열의 길이를 늘렸습니다: "+o.length);
		return o;
	}
	
	public static void printArr(Object[] o) {
		System.out.println("===배열출력===");
		for(int j=0; j<o.length; j++) {
			System.out.print(o[j]+" ");
		}
		System.out.println("");
	}

	public static Object[] inputArr(Object[] o, int start) {
		String s = "스트링";
		Integer i = Integer.valueOf(3);
		Float f = Float.valueOf(1.2f);
		B b = new B(3, "B");
		
		System.out.println(start+"번 인덱스부터 추가하겠습니다.");
		for(int j=start; j<o.length; j++) {
			if(j%4==1)
				o[j] = s;
			else if(j%4==2)
				o[j] = i;
			else if(j%4==3)
				o[j] = b;
			else
				o[j] = f;
		}
		
		return o;
	}
}


1단계 Object[]을 가진 클래스 생성

f1, f2, f3를 add 함수로 합치기


제네릭

T는 어떤 타입이 들어와도 됨. String도 가능

public class Box<T> {
	T x;
}


		List<Integer> slist = new ArrayList<>();
		slist.add(3);
		slist.add(5);
		System.out.println(slist);

결과: [3, 5]


		List<Integer> list = new ArrayList<>();
		for(int i=0; i<10; i++)
			list.add(i+1);
		for(int i=0; i<list.size(); i++)
			System.out.print(list.get(i)+" ");

결과: 1 2 3 4 5 6 7 8 9 10

System.out.println(list.contains(xbox.t.x));

결과: true


고객관리 프로그램

(일반고객) 고객번호: c+순번, 이름, 연락처, 구매금액: 입력값
(vip고객) 고객번호: v+순번, 이름, 연락처, 구매금액: 입력값, 포인트
1,000,000원 초과시 vip고객으로 전환 vip고객이 되었다는 메시지 출력
vip고객의 포인트 = 구매금액의 5%

Member.java

package ex0407;

public class Member {
	
	static private int index;
	int m_no;
	String name;
	String phone;
	int sale;
	
	Member(){
		m_no = ++index;
	}

	public int getM_no() {
		return m_no;
	}

	public String getName() {
		return name;
	}

	public String getPhone() {
		return phone;
	}

	public int getSale() {
		return sale;
	}

	/* 고객번호는 부여받는 것으로
	public void setM_no(int m_no) {
		this.m_no = m_no;
	}*/

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

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public void setSale(int sale) {
		this.sale += sale;
		if(this.sale>=1000000)
			System.out.println(getName()+"님, VIP로 전환되었습니다.");
	}

	@Override
	public String toString() {
		return "[고객정보] 고객번호: c" + m_no + " | 이름: " + name + " | 연락처: " + phone + " | 구매금액: " + sale +"원";
	}
}

VipMember.java

package ex0407;

public class VipMember extends Member{
	static int index;
	int point;
	Member m;

	VipMember(Member m){
		m_no = ++index;
		setName(m.getName());
		setPhone(m.getPhone());
		setSale(m.getSale());
		setPoint(m.getSale());
	}
	public int getPoint() {
		return point;
	}

	public void setPoint(int sale) {
		this.point = (int)(sale*0.05);
	}
	
	@Override
	public void setSale(int sale) {
		this.sale += sale;
		
	}

	@Override
	public String toString() {
		return "[VIP 고객정보] 고객번호: v" + m_no + " | 이름: " + name + " | 연락처: " + phone + " | 구매금액: " + sale +"원" + " | 포인트: "+point+"p";
	}
}

MemberTest.java

package ex0407;

public class MemberTest {

	public static void main(String[] args) {
		
		Member[] memberList = new Member[3];
		
		Member m1 = new Member();
		m1.setName("황기태");
		m1.setPhone("010-1111-2222");
		m1.setSale(200000);
		m1.setSale(100000);
		
		Member m2 = new Member();
		m2.setName("김효수");
		m2.setPhone("010-3333-4444");
		m2.setSale(700000);
		m2.setSale(300000);
				
		Member m3 = new Member();
		m3.setName("홍길동");
		m3.setPhone("010-5555-6666");
		m3.setSale(700000);
		
		memberList[0]=m1;
		memberList[1]=m2;
		memberList[2]=m3;
		
		System.out.println("========고객 정보 출력========");
		for(int i=0; i<memberList.length; i++) {
			if(memberList[i].sale>=1000000) {
				VipMember v = new VipMember(memberList[i]);
				memberList[i]=v;
			}
			System.out.println(memberList[i].toString());
		}
		System.out.println("==========================");
			
	}
}

보완해야할 점

  1. Member setSale에서 1,000,000원 이상 시 VipMember로 자동 전환
  2. 일반고객이 VIP로 전환되었을 때, 일반고객번호는 조정할 필요 없겠지? ㅇㅇ
  3. 일반고객에서 VIP로 전환하는 것을 main이 아니라 Member에서 해결하고 싶은데 오류남

0개의 댓글