본문 바로가기

자바 웹 개발자가 될거야/JAVA

[JAVA] Scanner 클래스 / File 클래스 / 멀티 스레드

< 입출력 관련 API >

 

 

① Scanner 클래스

 

- Scanner 클래스는 입출력 스트림도 아니고, 보조 스트림도 아님

- nextLine() 메서드 제공

 

public class Product {
	private int pno;
	private String name;
	private int price;
	private int stock;
	public int getPno() {
		return pno;
	}
	public void setPno(int pno) {
		this.pno = pno;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public int getStock() {
		return stock;
	}
	public void setStock(int stock) {
		this.stock = stock;
	}
	
}
import java.util.*;

public class ProductStorage {
	private List<Product> list = new ArrayList<>();
	private Scanner scanner = new Scanner(System.in);
	private int counter;
	
	public void showMenu() {
		while(true) {
			System.out.println("------------------------------");
			System.out.println("   1. 등록 | 2. 목록 | 3. 종료        ");
			System.out.println("------------------------------");
			
			System.out.print("선택: ");
			String selectNo = scanner.nextLine();
			switch(selectNo) {
				case "1" : registerProduct(); break;
				case "2" : showProducts(); break;
				case "3" : return;
			}
			
		}
	}
	
	public void registerProduct() {
		try {
			Product product = new Product();
			product.setPno(++counter);
			
			System.out.print("상품명: ");
			product.setName(scanner.nextLine());
			
			System.out.print("가격: ");
			product.setPrice(Integer.parseInt(scanner.nextLine()));
			
			System.out.print("재고: ");
			product.setStock(Integer.parseInt(scanner.nextLine()));
			
			list.add(product);
			
		}catch(Exception e) {
			System.out.println("등록에러: "+e.getMessage());
		}
	}
	
	public void showProducts() {
		for(Product p : list) {
			System.out.println(p.getPno()+"\t"+p.getName()+"\t"+p.getPrice()+"\t"+p.getStock());
		}
	}
}
public class ProductStorageExample {

	public static void main(String[] args) {
		ProductStorage productStorage = new ProductStorage();
		productStorage.showMenu();

	}
}

 

② File 클래스

 

- 파일 및 폴더 정보를 제공해주는 역할

- 문자열 경로 제공해야 함

  · 윈도우에서는 /, (\\) 둘 다 사용가능

  · 유닉스와 리눅스는 / 사용

 

File file = new File("C:/Temp/file.txt");
File file = new File("C:\\Temp\\file.txt");

 

 

 

< 멀티 스레드 >

 

- 동시에 여러개의 일을 처리하는 동작

- 프로세서 : 프로세스를 처리해주는 처리기 ( ex. CPU )

- 프로세스 : 메모리에 올라와져있는 일 ( ex. 파워포인트, 엑셀 등 .. )

 

- 프로세스와 프로세스는 독립적

- 스레드와 스레드는 하나의 애플리케이션 안에 들어가져있는 병렬의 단위

 

 

 

public class GameEx1 {

	public static void main(String[] args) {
		
		
		for(int i=10; i>0;i--) {
			try {
				Thread.sleep(1000);
			}catch (InterruptedException e) {}
			System.out.println("count down : "+i );
		}
		
		int num1 = (int)(Math.random()*9)+1; // 1~9
		int num2 = (int)(Math.random()*9)+1; // 1~9
		
		String msg = num1 + "*"+num2+" = ? ";
		
		
		String result = JOptionPane.showInputDialog(msg);
		System.out.println(result);
		
		if((num1*num2)==Integer.parseInt(result)) {
			System.out.println("빙고");
		}else {
			System.out.println("틀림");
		}
	}

}

- Thread.sleep() : 1초 쉼

 

 

 

 

- i와 j 10번씩 출력할건데 i 먼저 출력 후 j 출력하는게 아니라 동시에 실행시키려면 Thread 사용해야함

 

public class ThreadEx1 {

	public static void main(String[] args) {
		
		Thread t1 = new Thread(new Runnable() {
			
			@Override
			public void run() {
				for(int i=0; i<10;i++) System.out.println("i");					
			}
		});
		
		Thread t2 = new Thread(new Runnable() {
			
			@Override
			public void run() {
				for(int i=0; i<10;i++) System.out.println("j");				
			}
		});
		
		t1.start();
		t2.start();	
		
	}
}

 

 

- 결과는 실행할때마다 랜덤임