Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
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
Archives
Today
Total
관리 메뉴

스포츠마케터의 초보 개발자 도전기

JAVA study 14 본문

develop/JAVA

JAVA study 14

teammate brothers 2024. 3. 15. 09:52

1. abstract  추상메서드

package ex1_abstract;

public abstract class AbsParent {
	// ↑ 추상메서드를 하나라도 가지고 있는 클래스는 abstract 클래스로 만들어줘야한다.

	int value = 100;
	String str = "";

	public int getValue() {
		return value;
	}

	// 추상메서드 abstract
	// 추상메서드는 body가 없다
	// abstract 키워드를 가지고 있다
	abstract public void setValue(int n);

}

--

package ex1_abstract;

public class AbsChild extends AbsParent {

	// 추상클래스를 상속받은 자식클래스는
	// 부모가 가지고 있는 추상메서드를 (사용하지 않더라도)반드시 받아두어야한다
	// 부모인 추상클래스는 자신이 미완성한 기능을 자식이 완성시키도록 조건부 상속하고 있다
	@Override
	public void setValue(int n) {

		System.out.println(n);
	}

}

--

package ex1_abstract;

public class AbsMain {
	public static void main(String[] args) {

		AbsChild c = new AbsChild();
		c.setValue(10);

		// 추상클래스는 인스턴스를 직접 가질 수 없다
		// 즉, 객체화 시킬 수 없다;
		AbsParent p = new AbsParent() {

			@Override
			public void setValue(int n) {

			}
		};

	}// main
}

 

추상메서드로 스타크래프트 이해

package ex2_unit;

public abstract class Unit {

	String name;
	int energy;
	boolean fly;

	abstract public void decEnergy();

	public String getName() {
		return name;
	}

	public int getEnergy() {
		return energy;
	}

	public boolean isFly() {
		return fly;
	}

}

--

package ex2_unit;

public class Terran extends Unit {

	public Terran(String name, int energy, boolean fly) {
		super.name = name;
		super.energy = energy;
		super.fly = fly;

	}

	@Override
	public void decEnergy() { // 남은 에너지
		energy -= 3; // 공격받으면 깎이는 에너지
	}

}
package ex2_unit;

public class Protoss extends Unit {

	public Protoss(String name, int energy, boolean fly) {
		super.name = name;
		super.energy = energy;
		super.fly = fly;
	}

	@Override
	public void decEnergy() {
		energy--;
	}

}
package ex2_unit;

public class Zerg extends Unit {

	public Zerg(String name, int energy, boolean fly) {
		super.name = name;
		super.energy = energy;
		super.fly = fly;
	}

	@Override
	public void decEnergy() {
		energy -= 10;
	}

}

--

package ex2_unit;

public class UnitMain {
	public static void main(String[] args) {

		Terran t1 = new Terran("해병", 100, false);
		t1.decEnergy(); // 공격당함
		t1.decEnergy(); // 공격당함

		System.out.println("테란 에너지 : " + t1.getEnergy());

		Zerg z1 = new Zerg("히드라", 200, false);
		z1.decEnergy(); // 공격당함
		System.out.println("히드라 에너지: " + z1.getEnergy());

		Protoss p1 = new Protoss("셔틀", 150, true);
		p1.decEnergy();
		p1.decEnergy();
		p1.decEnergy();
		System.out.println("셔틀 에너지: " + p1.getEnergy());
	}// main
}

 

2. interface 인터페이스

1) 인터페이스 사용시 인터페이스 클래스(일반 클래스 아님) 선택해야함

package ex3_interface;

public interface InterParent {
	// interface에는 추상메서드와 상수 이외의 속성이 들어갈 수 없다
	// interface는 서비스 요청에 따른 중개자 역할
	abstract int getA();

	final int VALUE = 10;

	// final : 상수를 지칭하는 키워드
	// 상수 : 프로그램 종료까지 절대 바뀌지 않는 값
	// 상수는 모든 글자를 대문자로 작성하는 것이 관례

}

--

package ex3_interface;

public class InterChild implements InterParent {
//interface는 extends로 상속받지 못하고 implements로 '구현'

	@Override
	public int getA() {
		return 10;
	}

}

--

package ex3_interface;

public class InterMain {
	public static void main(String[] args) {

		InterChild c = new InterChild();
		System.out.println(c.getA());

		// 인터페이스 역시 미완성된 메서드가 있기 때문에
		// 직접적으로 메모리를 할당받는 것은 불가능
		InterParent ip = new InterParent() {

			@Override
			public int getA() {
				// TODO Auto-generated method stub
				return 0;
			}
		};

	}// main
}

 

예제) 메뉴판

package ex4_interface;

public interface Menu1 {

	// 인터페이스는 추상과 상수만 사용 가능하기 때문에
	// abstract, final 키워드를 따로 명시하지 않아도 된다

	public String jjajang();

	public String jjambbong();

}
package ex4_interface;

public interface Menu2 {

	public String tangsuyuck();

}
package ex4_interface;

public interface Menu3 {

	public String boggeumbab();
}
package ex4_interface;

public interface MenuAll extends Menu1, Menu2, Menu3 {
// interface만이 유일하게 interface끼리 extends로 다중 상속가능하다	
	public String mandu();

}

--

package ex4_interface;

public class Kitchen implements MenuAll {
//public class Kitchen implements Menu1, Menu2, Menu3 {
//interface는 구현 능력을 가지고 있지않으므로, 일반 상속과는 다르게 다중 구현이 가능하다

	@Override
	public String jjajang() {
		return "중면 + 춘장소스";
	}

	@Override
	public String jjambbong() {
		return "홍합 + 오징어";
	}

	@Override
	public String tangsuyuck() {
		return "돼지고기";
	}

	@Override
	public String boggeumbab() {
		return "이천쌀";
	}

	@Override
	public String mandu() {
		return "다진고기";
	}

}

--

package ex4_interface;

public class UserMain {
	public static void main(String[] args) {

		Kitchen kit = new Kitchen();
		System.out.println(kit.jjajang());
		System.out.println(kit.jjambbong());
		System.out.println(kit.tangsuyuck());

	}// main
}

 

3. Anonymous 익명클래스

package ex5_anonymous;

import java.util.Random;
import java.util.Scanner;

public class Ex1_Anonymous {

	public static void main(String[] args) {
		// 아래코드는 sc라는 객체이름을 정해두고
		// 필요할때마다 sc로부터 매서드를 호출할 수 있는 구조
		Scanner cs = new Scanner(System.in);

		// rnd라는 이름이 있는 Random클래스
		Random rnd = new Random();
		int n = rnd.nextInt(2);
		int n2 = rnd.nextInt(3);

		// 이름이 없는 Random클래스
		// 익명클래스는 호출 되었을때 딱한번만 사용되고 메모리에서 삭제
		int n3 = new Random().nextInt(5);

	}// main
}

 

package ex6_anonymousInner;

import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class EventMain {
	public static void main(String[] args) {

		Frame f = new Frame();
		f.setSize(300, 300);

		Button btn = new Button("버튼입니다");
		f.add(btn);

		// 익명 내부클래스
		// 메서드의 파라미터로 이름이 없는 클래스가 생성되는 구조
		btn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		f.setVisible(true);

	}// main
}

 

tip) eclipese Frame 사용시 한글이 깨지고 인식되지 않을때 해결방법 ↓

 

4. Generic

package ex7_generic;

public class GenTest<T> {
	// 제네릭 클래스 (제너릭 타입)
	// 클래스명에 <>가 있으면 제네릭 타입
	// 일반적인 코드를 작성하되, 이 코드를 다양한 타입의 객체에 대하여
	// 재활용이 가능하도록 만들어둔 클래스
	T value;

	public T getValue() {
		return value;
	}

	public void setValue(T value) {
		this.value = value;
	}
}
package ex7_generic;

public class GenMain {
	public static void main(String[] args) {
		// <>의 제네릭 타입으로는 반드시 클래스가 들어와야한다
		// <>을 String클래스로 만들어서 원래만들었던 T는 String타입으로 바꼈음
		GenTest<String> g1 = new GenTest<String>();
		g1.setValue("Hi");
		String s = g1.getValue();
		System.out.println(s);

		GenTest<Integer> g2 = new GenTest<Integer>();
		g2.setValue(10);
		int num = g2.getValue();
		System.out.println(num);

	}// main
}

 

과졔)

package ex8_work;

import java.util.Scanner;

public class Ex1_work {
	public static void main(String[] args) {

		// 크림빵 500원
		// 새우깡 700원
		// 콜라 400원
		// 사용자가 현재 가지고 있는 금액을 키보드에서 입력받고,
		// 크림빵, 새우깡, 콜라를 잔돈을 하나도 남기지않고 구입할 수 있는
		// 모든 경우의 수를 출력. 단, 사용하지 않는 상품이 있으면 안된다.
		// ----
		// 소지금 입력 : 4000원
		// 크림빵 1개, 새우깡 1봉지, 콜라 7캔
		// 크림빵 2개, 새우깡 2봉지, 콜라 4캔
		// 크림빵 3개, 새우깡 3봉지, 콜라 1캔
		// 크림빵 5개, 새우깡 1봉지, 콜라 2캔

		int cream = 500;
		int ggang = 700;
		int coke = 400;

		Scanner sc = new Scanner(System.in);
		System.out.print("소지금을 입력하세요 : ");
		int money = sc.nextInt();

		for (int i = 500; i <= money - 1100; i += 500) {

			for (int j = 700; j <= money - 900; j += 700) {

				for (int k = 400; k <= money - 1200; k += 400) {

					if (((cream * i / 500) + (ggang * j / 700) + (coke * k / 400)) == money) {
						System.out.printf("크림빵 %d개, 새우깡 %d개, 콜라 %d캔\n", (i / 500), (j / 700), (k / 400));
					}

				} // for3
			} // for2
		} // for1

	}// main
}

과제) tCode

package ex8_work;

import java.util.Scanner;

public class Ex1_work_tCode {
	public static void main(String[] args) {

		// 크림빵 500원
		// 새우깡 700원
		// 콜라 400원
		// 사용자가 현재 가지고 있는 금액을 키보드에서 입력받고,
		// 크림빵, 새우깡, 콜라를 잔돈을 하나도 남기지않고 구입할 수 있는
		// 모든 경우의 수를 출력. 단, 사용하지 않는 상품이 있으면 안된다.
		// ----
		// 소지금 입력 : 4000원
		// 크림빵 1개, 새우깡 1봉지, 콜라 7캔
		// 크림빵 2개, 새우깡 2봉지, 콜라 4캔
		// 크림빵 3개, 새우깡 3봉지, 콜라 1캔
		// 크림빵 5개, 새우깡 1봉지, 콜라 2캔

		int cream = 500;
		int ggang = 700;
		int coke = 400;

		Scanner sc = new Scanner(System.in);
		System.out.print("소지금을 입력하세요 : ");
		int money = sc.nextInt();

		for (int i = 1; money - i * cream > 0; i++) {
			for (int j = 1; money - j * ggang > 0; j++) {
				for (int k = 1; money - k * coke > 0; k++) {

					if (money == i * cream + j * ggang + k * coke) {
						System.out.printf("크림빵 %d개, 새우깡 %d개, 콜라 %d개\n", i, j, k);
					}

				}
			}

		} // outer

	}// main
}

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

JAVA study 16  (0) 2024.03.19
JAVA study 15  (0) 2024.03.18
JAVA study 13  (0) 2024.03.14
JAVA study 12  (0) 2024.03.13
JAVA study 11  (1) 2024.03.12