선생님 코드 package mega.backend_onemore.Day27.Prac27; // 스타크래프트 문제 /* 나머지 클래스 Unit을 추상클래스로 하고, 여기에 필드 초기화, 생성자에 필드들 다 때려박음 print() 도 추상 메서드로 구현해놓음. 저글링 클래스는 유닛 클래스를 상속받고, 생성자에 super() 안에 값 다 때려 박음. print 메서드 여기서 구현 // 히드라 클래스, 마린 클래스 모두 동일함. [테란 클래스] 1. 마린 3마리 객체 배열 2. 공격 순서를 위한 턴 만들기 3. 공격을 당하는 기능 4. 공격을 하는 기능 5. 공격을 당한 후에 에너지가 0이면 null로 변경하는 기능 6. 게임 종료를 알려주는 기능 [저그 클래스] 1. 저글링 / 히드라 만들기 -> 배열 / 생..

1. public class ListTest1 { public static void main(String[] args) { String[] name = {"kim", "lee", "park", "jung", "oh"}; ArrayList lname = new ArrayList(Arrays.asList(name)); // 이 순간 lname에 이 name 배열이 들어간다. System.out.println("초기 값 : " + lname); lname.add("ha"); // oh 뒤에 붙는다 System.out.println("\"ha\" 가 추가된 후의 값 : " + lname ); lname.set(0, "김"); // 한글로 김으로 바뀜 lname.set(3, "곽"); // jung이 곽으로 바뀜..
소스코드 interface Repairable{} interface Heal{} class Unit{ int attack; int hitPoint; final int Max_HP; Unit(int hp, int attack){ Max_HP = hp; // 타고 올라오니까 처음에 150들어가고 this.attack = attack; // 10들어온다. } } class GroundUnit extends Unit{ GroundUnit(int hp, int attack){ super(hp, attack); } } class AirUnit extends Unit{ AirUnit(int hp, int attack){ super(hp,attack); } } class Tank extends GroundUnit im..
Q. 사람 5명 기부 문제 - 5명이 기부를 1,000원씩 함. - 총 성금이 50만원이 되면 프로그램을 종료함. - 그런데 이제 문제는, 줄 한번 서면 얘들은 정확하게 알 수가 없어서 프로그램 종료 시에는 항상 504,000원이 출력된다. 풀이 소스코드 class Account { int money = 0; synchronized void sendMoney() { // 돈내기 메서드 money += 1000; } } class Contributor extends Thread { // 얘가 각자 송금을 할 거니까 thread를 받는다. // 또한 Account 실객체를 하나 만들어서 돌려쓸 거니까, Account는 보유하고 있어야. // Account도 main문에서 받아온 거 하나를 넣어줄거란 말이죠...

쓰레드 사이의 통신 - 선행 쓰레드와 후행 쓰레드 구분! (먼저 작업을 수행해야하는 쓰레드와 그걸 이어받아서 하는 쓰레드로 구분하여 만들 수 있다.) 구조 주의사항 ※ notify(), notifyAll() 메서드는 Synchronized 메서드 내에서 사용 될 수 있다. 예제코드 package mega.backend_onemore.Day31; class Factory{ private int value; private boolean check = false; // 처음엔 false로 시작 synchronized void send(int value) { while(check == true) { // false부터 시작하므로 처음에 얘는 안 돈다. try { // true여서 여기로 들어올 수 있고 wait..

먼저 쓰레드 사용법 1. class 사용 -> 쓰레드를 사용하는 클래스에 Thread를 상속한다. class A extends Thread{ public void run(){ } } => 객체 만들고 start() 하면 됩니다. A a = new A(); a.start(); -> run 메드 실행 2. interface 구현 -> 쓰레드 사용을 위해 Runnable 이라는 인터페이스를 구현한다. class B implements Runnable{ public void run(){ } } => Thread를 따로 만들어서 start() 해야 합니다. B b = new B(); (b.start(); => 안 됨!) Thread temp = new Thread(b); // 그래서 쓰레드를 따로 만들어줘야 함...

join() - 자기도 하나의 쓰레드지만, 다른 하나가 끝날 때까지 기다렸다가 실행하는 것. (쓰레드 만든(부른) 애가.) * join() 을 걸면 main에 있는 애가 무조건 가장 마지막으로 기다렸다가 받아서 동작함. * 그런데 이것도 하나의 실행 흐름이기 때문에 main이 아닌 다른 곳에서도 join을 쓰면 걔가 마지막까지 기다렸다가 동작. 실생활에서 예시를 찾아보면 - 식당에서, 종업원들이 다 집에 가고 난 후 사장이 최종 점검하고 문 닫고 퇴근하는 것. join() 예시 코드 package Day30; class DThread extends Thread { DThread(String str) { setName(str); // 쓰레드 이름을 지정할 수 있다. // 이건 쓰레드 안에 기본적으로 제공하..