6/20

ONLYS2545·2023년 6월 20일
0

제네릭


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;
    }

}
profile
백엔드 교육과정 기록 velog입니다.

0개의 댓글