package ex13;
class Box<T> {
T num;
}
public class Generic01 {
public static void main(String[] args) {
Box<Integer> b1 = new Box<>();
b1.num = 1;
System.out.println(b1.num);
Box<Double> b2 = new Box<>();
b2.num = 1.0;
System.out.println(b2.num);
}
}
package ex13;
class 윤석열 {
// new를 할 수 없는 경우(new해서 코드 설계가 불가능한 경우)에 주로 Object 타입 변수 사용
private Object data;
private static 윤석열 instance = new 윤석열();
public static 윤석열 getInstance() {
return instance;
}
private 윤석열() {
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
public class Generic02 {
public static void main(String[] args) {
윤석열 d1 = 윤석열.getInstance();
d1.setData(1);
int value = (int) d1.getData();
System.out.println(value);
}
}
package ex13;
class Data<T> {
int status; // 200
T body; // 값
}
public class Generic03 {
Data<?> getNum(int check) {
if (check == 1) {
Data<String> data = new Data<>();
return data;
} else {
Data<Integer> data = new Data<>();
return data;
}
}
Object getNum2(int check) {
if (check == 1) {
return "안녕";
} else {
return 1;
}
}
public static void main(String[] args) {
Generic03 g3 = new Generic03();
int n = (int) g3.getNum2(1);
Data<?> d = g3.getNum(1);
}
}
벡터타입의 list , ArrayList 타입의 list 전체 원소 보기
--> println(list). 배열과 달리 변수명을 찍으면 원소를 볼 수 있다.
그러나, 특정 인덱스의 원소를 보려면 list.get(0)과 같이 인덱스를 이용한다.
벡터
package practice;
import java.util.Vector;
class Monster {
String name;
double hp;
public Monster(String name, double hp) {
this.name = name;
this.hp = hp;
}
public String toString() {
return "{" + name + "," + hp + "}";
}
}
public class VectorExample2 {
public static void main(String[] args) {
Vector<Monster> list = new Vector<>();
list.add(new Monster("Mon1", 100));
list.add(new Monster("Mon2", 200));
list.add(new Monster("Mon3", 300));
System.out.println("벡터의 크기" + list.size());
System.out.println(list);
System.out.println(list);
}
}
ArrayList
package practice;
import java.util.ArrayList;
class Point {
int x, y;
public Point(int x, int y) {
this.x = x + 15;
this.y = y + 15;
}
public String toString() {
return "(" + x + "," + y + ")";
}
}
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Point> list = new ArrayList<>();
list.add(new Point(0, 0));
list.add(new Point(4, 0));
list.add(new Point(3, 5));
list.add(new Point(-1, 3));
list.add(new Point(13, 2));
System.out.println(list);
}
}
package practice;
import java.util.ArrayList;
public class ArrayListTest2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("MILK");
list.add("BREAD");
list.add("BUTTER");
list.add(1, "APPLE");
list.set(2, "GRAPE");
list.remove(3);
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i) + " ");
}
}
Set
package practice;
import java.util.HashSet;
public class SetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("Milk");
set.add("Bread");
set.add("Butter");
set.add("Cheese");
set.add("Ham");
set.add("Ham");
System.out.println(set);
if (set.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
}
}
중복 검사
package practice;
import java.util.HashSet;
import java.util.Set;
public class FindDuplication {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
String[] sample = { "사과", "사과", "바나나", "토마토" };
for (String a : sample)
if (!s.add(a))
System.out.println("중복된 단어" + a);
System.out.println(s.size() + " 중복되지 않은 단어" + s);
}
}
package ex13;
public class Thread01 {
// CPU가 하나의 스레드를 생성하여 실행된다.
// 실 == main 메서드
public static void main(String[] args) {
new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("서브스레드 : " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// target(스레드의길이)
}).start();
for (int i = 0; i < 5; i++) {
System.out.println("메인스레드 : " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
BubbleFrame.java
package test.ex04;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
// main 스레드를 GUI 프로그램에서는 ui 스레드라고 부른다.
public class BubbleFrame extends JFrame {
private JLabel backgroundMap;
private Player player;
public BubbleFrame() {
initObject();
initSetting();
initListener();
setVisible(true); // while
}
private void initObject() {
backgroundMap = new JLabel(new ImageIcon("image/backgroundMap.png"));
setContentPane(backgroundMap);
player = new Player();
add(player);
}
private void initSetting() {
setSize(1000, 640);
setLayout(null); // absoulte 레이아웃 (자유롭게 그림을 그릴 수 있다)
setLocationRelativeTo(null); // JFrame 가운데 배치하기
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // x버튼으로 창을 끌 때 JVM 같이 종료하기
}
private void initListener() {
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
// System.out.println(e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (!player.isLeft()) {
player.left();
}
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
if (!player.isRight()) {
player.right();
}
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
player.setLeft(false);
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
player.setRight(false);
}
}
});
}
public static void main(String[] args) {
new BubbleFrame();
}
}
Player.java
package test.ex04;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Player extends JLabel {
// 위치 상태
private int x;
private int y;
// 플레이어의 방향 상태
private boolean left;
private boolean right;
private boolean up;
private boolean down;
private ImageIcon playerR, playerL;
public Player() {
initObject();
initSetting();
}
public void initObject() {
playerR = new ImageIcon("image/playerR.png");
playerL = new ImageIcon("image/playerL.png");
}
private void initSetting() {
x = 70;
y = 535;
setIcon(playerR);
setSize(50, 50);
setLocation(x, y);
left = false;
right = false;
up = false;
left = false;
}
public void right() {
System.out.println("right메서드 실행됨");
right = true;
new Thread(() -> {
while (right) {
setIcon(playerR);
x = x + 10;
setLocation(x, y);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
public void left() {
System.out.println("left메서드 실행됨");
left = true;
new Thread(() -> {
while (left) {
setIcon(playerL);
x = x - 10;
setLocation(x, y);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public boolean isLeft() {
return left;
}
public void setLeft(boolean left) {
this.left = left;
}
public boolean isRight() {
return right;
}
public void setRight(boolean right) {
this.right = right;
}
public boolean isUp() {
return up;
}
public void setUp(boolean up) {
this.up = up;
}
public boolean isDown() {
return down;
}
public void setDown(boolean down) {
this.down = down;
}
public ImageIcon getPlayerR() {
return playerR;
}
public void setPlayerR(ImageIcon playerR) {
this.playerR = playerR;
}
public ImageIcon getPlayerL() {
return playerL;
}
public void setPlayerL(ImageIcon playerL) {
this.playerL = playerL;
}
}