자바스터디

    [자바스터디] 쓰레드 동기화 & Volatile

    쓰레드 동기화 (Synchronized) 여러 쓰레드가 공유 리소스를 사용하는 경우, 서로 상호 배제를 하여 문제가 발생하지 않도록 하는 기법입니다. 왜 동기화가 필요할까? 하나의 프로세스에서 A쓰레드와 B쓰레드가 있다고 생각해보자, 여기서 A쓰레드가 c변수를 읽는동안 A쓰레드의 시간이 다 되어 B쓰레드로 CPU의 통제권이 넘어갔습니다. 이때 B쓰레드 또한 C변수를 읽고 변경하게 후 A쓰레드로 다시 통제권을 넘겨준다면, C변수의 상태가 변경되었기 때문에 잘못된 접근을 할 수 있습니다. 따라서 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것이 동기화입니다. 이를 위해 임계 영역(Critical Section), 뮤텍스(Mutex), 세마포어(Semaphore) 등의 동기화 기법을 사용합..

    [자바스터디] 쓰레드 동작 순서

    쓰레드 동작 순서 쓰레드 스케쥴링 운영체제가 CPU자원을 여러 쓰레드들 간에 할당하는 과정 우선 순위, 실행시간, 상태 등을 고려하여 CPU를 각 쓰레드들에게 적절하게 할당하여 시스템 전체의 성능을 향상시킵니다. 쓰레드 상태 NEW : 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 RUNNABLE : 실행 중 또는 실행 가능한 상태 BLOCKED : 동기화 블럭에 의해서 일시정지된 상태 ( Lock이 풀릴 때까지 기다리는 상태 ) WAITING, TIMED_WAITING : 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지된 상태 TERMINATED : 쓰레드의 작업이 종료된 상태 실행 대기열 QUEUE와 같은 구조로, 다음 실행을 위해 대기하는 상태 쓰레드 스케쥴링 과정 쓰레드..

    [자바스터디] Collection - Iterator

    Iterator 컬렉션의 프레임워크에서 저장된 요소들을 읽기 위한 방법 종류: Iterator : 표준화한 인터페이스 ListIterator : Iterator의 기능을 향상 시켰다. Enumeration : Iterator이전에 사용하던 인터페이스 1. Iterator Interface - List, Set iterator의 경우 리스트의 순환에 사용한다. 따라서 리스트의 메서드에는 .iterator()로 Iterator의 인터페이스를 가져오는 메서드가 존재하므로, 해당 메서드를 사용하면 된다. List a = new ArrayList(Arrays.asList(111,222,333,444,555,666,777)); for (Iterator iter = a.iterator(); iter.hasNext()..

    상속 - 추상클래스

    추상클래스 클래스에는 추상 클래스라는 것이 있습니다. 추상클래스는 하나의 미완성 클래스입니다. 미완성 클래스 ? 완성할 필요가 있는 클래스입니다. 한마디로 일반 클래스는 '내가 가지고 있는걸 기본으로 추가해서 너가 써' 입니다. 그러나 추상클래스는 '내가 가지고 있는걸 기본으로 줄께 근데, 꼭 필요한게 있으니까 규격에만 맞게 너가 작성하고 반드시 추가해' 입니다. 즉 추상 클래스는 자식 클래스들에게 하나의 길을 알려주는 것과 같습니다. 또한 추상클래스는 추상 메서드를 가지고 있어야합니다. 추상 클래스 작성법 abstract class AbastractClass { } 여기서 꼭 추상 클래스에 추상 메서드가 없어도 됩니다. 하지만 추상 메서드가 존재한다면 추상 클래스여야만 합니다. 이것을 제외하면 일반 클..

    [자바스터디] 5. 클래스

    학습할 것 객체 지향 프로그래밍 클래스 정의하는 방법 구성요소 반환 자료형 속성 메서드 메서드 생성자 this 키워드 이해하기 접근 제어자 객체 만드는 방법 (new 키워드 이해하기) 클래스 vs 객체 vs 인스턴스 1. 객체 지향 프로그래밍 프로그래밍하는 이론 한 개 이상의 클래스들이 서로 유기적으로 동작하는 것 2. 클래스 객체 지향 프로그래밍에서의 기본 단위 하나의 틀(붕어빵을 만드는 기계) 클래스는 특정 기능이나 목적을 하는 객체를 표현하기 위한 설계도나 틀로 생각하면 좋을 것 같습니다. 이러한 설계도는 객체를 만들기 위한 사이즈나 내용, 어떤 기능이나 동작을 하는지가 담겨있습니다. 클래스 정의하는 법 [접근 제어자] [반환 데이터형] [메서드 이름] ( [매개변수]) {} 구성요소 반환 데이터 ..

    [자바스터디] 4. 선택문, 반복문

    학습할 것 선택문 if/else Switch/case 반복문 for for-each while do-while 제어 continue break 1. 선택문 if/else 참인지 거짓인지 확인하여 참일 경우에만 해당 블록 내부가 동작 (Ex. 홀수 짝수 분류) 1 2 3 4 5 6 7 8 9 10 11 12 public class Example { public static void main(String[] args) { int a = 4; if((a & 1) == 0) { System.out.println("짝수입니다."); } else { System.out.println("홀수입니다."); } } } 0~1은 변수 선언 및 저장이므로 2부터 if문 내부의 조건문 시작입니다. 여기서 볼 점은 if문에 대..

    [자바스터디] 3. 연산자

    학습할 것 산술 연산자와 대입 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 1. 산술 연산자와 대입 연산자 연산자 사용 예제 설명 = a = 3; 대입 연산자입니다. + b = a + 2; 변수a와 2를 더하여 b에 대입 - c = b - 2; 변수b에 2를 뺀 후 c에 대입 * d = c * 2; 변수c에 2를 곱한 후 d에 대입 / e = d / 4; 변수d에 2를 나눈 몫을 e에 대입 실수의 경우 나눈 값을 대입 % f = d % 4; 변수f에 2를 나눈 나머지를 e에 대입 실수의 경우 나머지를 대입 1 2 3 4 5 6 7 8 9 ..

    [자바스터디] 2. 변수

    학습할 것 변수란? 부동 소수점 BigInteger와 BigDecimal Wrapper 클래스프리미티브 타입 레퍼런스 타입 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 접미사(L, D, F) 리터럴 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 1. 변수 자료형: 우리가 사용할 내용의 그릇 변수명: 그 그릇의 이름 변수 핸들링: 어떤 내용을 사용하기 위해 그릇에 담고 그 그릇을 다루는 일 변수명은 사용 목적을 내포해야합니다. 2. 프리미티브 타입 비객체 타입 Type Name Byte 유효 저장 범위 기본 값 논리형 boolean 1bit 0(false) ~ 1(true) false 문자형 char 2bytes 0 ~ 2^(16)-1 '\u0000'..

    [자바스터디] 1. JAVA와 JVM

    학습할 것 JAVA란? JVM이란 무엇인가 바이트코드 vs 바이너리 코드 자바 동작 순서 JVM 구성 요소 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JDK와 JRE의 차이 1. JAVA란? 다양한 운영체제에 독립적으로 실행 가능한 언어 객체 지향 언어 독립적인 언어 (JVM 제공) 자바는 운영체제와는 독립적 실행가능 Garbage Collector를 지원하여 자동 메모리 관리등 안정성이 높다 연산자 오버로딩 금지, 제네릭 도입하여 가독성 높였다 멀티 스레드 프로그래밍을 지원 수많은오픈 소스를 찾을 수 있다. 자바는 임베디드 시스템을 위한 언어로 개발되었다. ( Ex. FPGA Eclipse BSP ) 2. JVM이란 무엇인가 프로그램을 실행시키는 프로그램이다. JVM (JAVA Virtual Mach..