본문 바로가기

개발자노트

(260)
반복문 for / for each + 컬렉션 [Iterator] for문과 for each문의 차이 ArrayList al =new ArrayList(); al.add(1); al.add(2); al.add(3); al.add(4); al.add(5); Integer 값만 받는 ArrayList al을 생성하여 {1,2,3,4,5} 를 배열에 넣어줬다. 이 때 배열 안에 인자값 들을 보기 위해서는 다음과 같이 for문을 사용했는데, for (int i = 0; i < al.size(); i++) { System.out.println(i); } 이 때 일반 for문 , for(초기식 ; 조건식 ; 증감식){ 반복 수행할 작업 } 을 사용하여도 상관이 없지만 1. 가독성이 떨어질 수 있고 2. ArrayIndexOutOfBoundException을 만날 수도 있다. 이러..
스레드 [Thread] 의 동기화(synchronized) - 티켓팅 예제 동기화를 하는 이유: - 공유된 자원을 단순 처리속도로 수행하게 되면, 실질적인 자원이 없음에도 불구하고 먼저 수행을 해버리고 discount를 나중에 하게 된다면 , 복잡한 일이 많이 생길 것이다. - 극단적인 예로 은행에서의 현금인출과 티켓팅이 있을 것인데, 티켓팅에 대한 예제를 살펴볼 것이다. package class05; // [동기화] // : 공유자원을 어떤 스레드가 점유하고있을때, // 다른 스레드의 접근을 막는 것 class Person implements Runnable { Ticketting t = new Ticketting(); @Override public void run() { t.pay(); } } class Ticketting { static int ticket = 2; // ..
스레드 [Thread]의 기본사용법 출력을 해보면 우리가 원래 알던 for문처럼 순서대로 나오는 것이 아니라, 두 스레드 중 먼저 일을 처리한 쪽이 나오면서 순서가 뒤죽박죽인 것을 볼 수 있을 것이다. package class05; // [스레드] // : 기사,컴퓨터구조,프로세스,.. class Th1 extends Thread { // 스레드는 작업을 처리하는 주체(대상) // 그래서 오버라이드가 필수 @Override public void run() { for (int i = 0; i 인터페이스가 가지는 "강제성"! @Override public void run() { // 스레드라면 run을 무조건 가지고 있어야해! for (int i = 0; i
스레드[Thread]의 기본원리 자바는 Thread 클래스 자체를 JAVA에서 제공한다. 프로그램의 작동 순서는 아래와 같은데 ✅프로그램 → 실행(메모리를 할당받아야함) → 프로세스 ↕ 일할 수 있도록 자원을 받은 상태 ✅자원을 할당받은 프로세스가 [일들을 처리해내면서] 작업을 진행한다. [-> 일들을 실질적으로 처리하는 대상=스레드]
예외처리 - 나만의 예외 만들기 상황 : 나이를 입력하시오 (0~200) 내로 유효한 범위 내의 나이를 받고 싶은데, 기본적으로 제공되는 예외처리로는 예외처리를 하기가 어려움, 이를 위해 나만의 예외처리를 만드려고 한다. package class02; import java.util.Scanner; // +) // 나만의 예외만들기 class MyException extends Exception{ // 멤버변수 메세지 값을 // 반드시 설정해서 만들수있게! // -> 생성자: 멤버변수 값을 초기화할때 private String message; MyException(String message){ this.message=message; } public String getMessage() { return message; } } public c..
예외처리 throw 이름 그대로 throw 던진다 catch로... throw 예외를 발생시키는 키워드 ​ throw 예외객체; ex) throw new ArrayIndexOutOfBoundsException(); ​ 보통 생성자의 매개변수로 문자열 값을 넘겨주면 해당 문자열값이 부연설명으로 들어가도록 설계되어있다 throws 예외처리를 떠넘길때 사용하는 키워드 ​ 메소드를 정의할때 예외 처리를 떠넘김으로서 사용하는 사람이 원하는 방식으로 예외처리를 할 수 있게 한다
예외처리 - InputMismatchException 우리가 예외처리를 잡고 있을 때, InputMismatchException 즉, Scanner(System.in) 으로 받은 input 값이 형식과 mismatch 됐다는 오류인데, catch를 했는데도 불구하고, 무한루프가 걸리는 때가 발생할 것이다. 이는 return으로 즉시 종료를 시키는 방법도 있지만, 우리는 정확한 입력값을 받을 때 까지 다시 입력을 받는 상황을 만들고 싶을 땐 아래처럼 하면 된다. 즉 , int num에 들어가지 못하고, 버퍼에 남아있어서 입력을 계속해서 하는 것으로 인식하여서 이렇게 sc.nextLine() 을 사용하여 버퍼 안에서 매칭되지 못한 문자열을 증발 시키면 된다.
예외와 예외처리(try, catch) - Exception, .printStackTrace(); 사용 아직 어떤 예외가 발생할지 모르기 때문에 Exception을 사용한다. 그리고 그걸 개발자가 확인할 수 있게 사용하는 것이 .printStackTrace(); 을 사용하여 시각화한다. package class02; import java.util.ArrayList; import java.util.Scanner; public class Test04 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList data = new ArrayList(); data.add(-1); data.add(0); data.add(1); data.add(2); data.add(3); System.out.println("로그: ..