이전에 포스팅한 join() 메서드에서도 언급했듯, Thread는 Main 메서드의 순서와는 별개로 실행된다는 것이 장점이자 단점이다. 즉, 실행 속도에 따라 원치 않는 결과를 얻을 수도 있는 것이다. 간단한 예시로 한 은행 계좌에 두 명의 사람이 각각 입금과 출금을 한다고 가정하고 코드를 짜 보자. ○Bank.java package com.choonham; public class Bank { private int money = 10000; //현재 잔액 초기 값 public Bank() { // TODO Auto-generated constructor stub } /* 입금 처리 메서드 */ public void MoneyIn(int save) { int m = this.money; try { Thre..
스레드는 기본적으로 메인과 따로 작동을 하기 때문에 Main 안에 어떤 순서로 스레드를 놓아도 따로따로 실행이 된다. 그러나 특정 데이터 값의 연산이나 특정 작업을 각 스레드가 모두 종료된 뒤에 실행되게끔 만드려면, 각각의 스레드가 모두 종료될 때까지 대기하다 Main을 끝마쳐야 한다. 이럴 때 사용하는 메서드가 바로 join() 메서드이다. ARS로 모금을 진행하는 간단한 예제로 이해해보자. ○Account: package com.choonham; public class Account { //모금함 private int total = 0; public Account() { } public void deposit() { this.total = this.total + 1000; } public int ge..
각 스레드 객체를 생성한 뒤 어느 스레드를 우선으로 실행할 지 지정해줄 수 있다. 그러나, 예시에서 사용할 코드는 각각 스레드의 작업량이 그렇게 많지 않아서 뚜렷한 우선순위 차이를 보기는 힘들다. 그냥 priority 를 이렇게 지정하는구나...라고 생각하면 될 거 같다. ○PriorityThread: package com.choonham; public class PriorityThread extends Thread { public PriorityThread() { // TODO Auto-generated constructor stub } public void run() { int i = 0; System.out.println(this.getName() + "[우선권:" + this.getPriority..
주먹구구식으로 Spigot 플러그인을 제작할 때, 항상 Runnable 인터페이스를 잘 사용을 못해서, HashMap으로 스킬 쿨타임 들을 구현했던 기억이 난다. (뭐, 지금 생각해도 Map이 더 효율적인 방법이긴 하지만...ㅎ) 아무리 여러 블로그에 있는 포스팅들을 읽어봐도 Multi Threads 로 제 각각의 타이머를 만드는 개념이 이해가 잘 안 됐었다. 그래서 다루는 김에 간단히 1분을 세는 타이머를 구현한 방법을 적어볼까 한다. ○RunnableTest: package com.choonham; public class RunnableTest implements Runnable { int count = 0; int num = 0; boolean timeOut = false; public Runnab..
Multi Thread를 구현하기 위한 run() 메소드는 Runnable 인터페이스가 가지고 있으며, 이 Runnable 인터페이스를 구현받은 Thread 클래스를 이용하여 구현할 수도 있다. 즉, 간단하게 구조를 보면.. run() 메서드: public interface Runnable{ public void run(); } Thread 클래스: public class Thread implements Runnable{ public Thread(){ } @Override public void run() { } } 위와 같이 구성되어 있으므로 Thread 클래스를 상속 받거나, Runnable 인터페이스를 구현 받는 방식으로 run() 메서드를 구현할 수 있다는 것이다. ThreadClass를 상속 받는..
상속: 주로 객체에 관련된 개념이며, 상속된 객체는 변수, 메서드, 상수 등을 가질 수 있다. 또한 메서드 재정의는 해도 되고 안해도 되는 선택 사항이다. extends는 중복이 불가능하다. 인터페이스: 주로 기능에 관련된 개념이며, 추상 메서드를 가지며, Implements 받는 객체 내에서 메서드 재정의는 필수 사항이다. Implements는 중복이 가능하다. Override 의 간단 예시: 추상 클래스: 일반 클래스와 인터페이스를 합친 개념이라고 생각하면 된다. 일반 클래스와 같이 생성자를 사용할 수 있지만, 추상 클래스는 다른 객체에서 new 로 인스턴스화 할 수 없다. 즉 일반 클래스의 부모로만 사용되는 클래스라고 볼 수 있다. 추상 클래스는 1. 공통된 필드와 메서드를 통일할 목적 2. 실체클..
상속 : 부모클래스(super class) 로 부터 모든 자원을 물려받는 개념 반드시 extends 키워드를 이용하여 상속받을 부모클래스를 지정. 단, 한번에 하나의 클래스만 상속받을 수 있다. 예) public class A{ } public class B{ } public class C extends A{ // 가능 } public class C extends A, B{ // 불가능 } public class D extends A{ // 가능 } public class E extends D{ // 가능 } 상속이 가능한 부모클래스의 변수 및 메서드 1. 부모와 자식이 같은 패키지에 존재 할 경우 public int a; char c; private 이 붙은 메서드나 변수는 상속 불가능 2. 부모와 자..
1. Comparable과 Comparator? 1) Comparable 인터페이스 - java.lang.compable 패키지에 있는 인터페이스 - 정렬 수행시 기본적으로 적용되는 정렬 기준을 정하는 메소드를 정의해놓는 인터페이스이다. 2) Comparator 클래스 - java.util.Comparator 패키지에 있는 클래스 - 기본 정렬 기준과 다른 기준을 정하여 정렬을 할 필요가 있을 때 사용 2. 사용 방법 1) Comparable 기본적인 Comparable 인터페이스의 사용 방법은 다음 코드와 같이 Comparable을 정렬이 필요한 클래스을 제네릭 타입으로 implements해주고, compareTo 메소드를 오버라이딩하여 정렬 기준을 스스로 정해주면 된다. Code: public cla..
- redux
- 인천 구월동 맛집
- 인천 구월동 이탈리안 맛집
- Promise
- react
- javascript
- AsyncStorage
- redux-thunk
- 파니노구스토
- Async
- await
- 이탈리안 레스토랑
- 정보보안기사 #실기 #정리
- react-native
- 맛집
- Total
- Today
- Yesterday