Language

해당 포스팅은 백기선님 java live-study를 통해 학습한 내용입니다. https://github.com/whiteship/live-study/issues/3 학습할 것 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 0. 연산자 연산자: 연산에 사용되는 표시나 기호 피연산자: 연산되는 데이터 연산식: 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것 // +, -, *, == 은 연산자 // x, y, z는 피연산자 x + y x - y x * y + z x == y 연산자의 종류 연산자를 크게 4가지로 산술, 비교, 논리,..
학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var 1. 프리미티브 타입 종류와 범위 그리고 기본 값 프리미티브 타입은 기본 타입으로, 정수형 타입, 실수형 타입, 문자형 타입, 논리형 타입으로 나눌 수 있다. 기본형은 모두 8가지 타입이 있다. 이미지 출처 프리미티브 타입의 설명은 다음 표에 정리하였다. 프리미티브형에는 기본값이 존재해 NULL값이 존재하지 않음. 실제 값은 스택 메모리에 저장되며 저장 가능한 범위를 넘게 값을 저장하면 컴파일 에러가 발생한다. 프리미티브 타입 저장 공간 이미지 출처 프리미티브 ..
학습목표 1. JVM이란 무엇인가 2. 컴파일 하는 방법 3. 실행하는 방법 4. 바이트코드란 무엇인가 5. JIT 컴파일러란 무엇이며 어떻게 동작하는가 6. JVM의 구조 7. JDK와 JRE의 차이 1. JVM이란 'Java Virtual Machine' 을 줄인 것으로 자바를 실행하기 위한 가상 기계이다. 이미지 출처 Java는 OS에 종속적이지 않는 특징이 있다. Java가 나오기 전 기존의 언어는 각 운영체제에 맞게 코드를 작성하는 많은 노력이 필요하였지만 Java는 운영체제에 독립적이기 때문에 운영체제가 바뀌어도 동일한 코드로 똑같이 동작한다. 이 이유는 JVM이라는 것 때문이다. 이미지 출처 JVM은 가상 컴퓨터로 독립적인 실행이 가능한데 일반 애플리케이션은 OS와 맞붙어 있어 OS에 종속적..
제네릭을 왜 쓰는가? 바나나와 책을 저장하는 객체가 있다고 생각해보자 // Banana클래스와 Banana클래스를 담을 수 있는 Good1클래스 class Banana{} class Goods1{ private Banana banana = new Banana(); public Banana getBanana(){ return banana; } public void setBanana(Banana banana){ this.banana = banana; } } // Book클래스와 Book클래스를 담을 수 있는 Good2클래스 class Book{} class Goods2{ private Book book = new Book(); public Book getBook(){ return book; } public ..
쓰레드는 객체가 생성, 실행, 종료되기까지 다양한 상태를 가진다. 각 쓰레드는 Thread.State 상태로 정의되었다. Thread의 인스턴스 메서드인 getState()로 쓰레드의 상태값을 가져올 수 있다. Thread.State getState() Thread.State의 내부에는 6개의 문자열 상수(NEW, RUNNABLE, TERMINATED, TIMED_WAITING, BLOCKED, WAITING)가 저장되어 있다. NEW new 키워드로 쓰레드의 객체가 생성된 상태(start()전) RUNNABLE start() 이후 CPU를 사용할 수 있는 상태 다른 쓰레드들과 동시성에 따라 실행과 실행 대기를 교차함 TERMINATED run()메서드의 작업 내용이 모두 완료돼 쓰레드가 종료된 상태 (..
동기화: 하나의 작업이 완료된 후 다른 작업을 수행하는 것 비동기: 하나의 작업 명령 이후 완료 여부와 관계없이 바로 다른 작업 명령을 수행하는 것. 동기화의 필요성 멀티쓰레드를 사용할 때 동기화는 필요하다. 이유를 알아보자. 왼쪽의 step3도중 오른쪽 step1이 먼저 발생하면 결과는 5가 아닌 4가 나올 것이다. 동기화를 사용하지 않았을 때 문제가 발생된다. class MyData{ int data = 3; public void plusData(){ int mydata = data; try{Thread.sleep(2000);} catch (InterruptedException e){} data = mydata + 1; } } class PlusThread extends Thread{ MyData m..
쓰레드의 속성 종류 현재 쓰레드 객체 참조 값 얻어오기 객체를 참조할 수 없을 때 Thread클래스이 정적 메서드인 currentThread()메서드를 이용해 현재 쓰레드 객체의 참조값을 얻어올 수 있다. static Thread Thread.currentThread() 실행중인 쓰레드의 개수 가져오기 현재 실행중인 쓰레드 개수를 알고 싶을 때 사용 static int Thread.activeCount() 쓰레드의 이름 지정 및 가져오기 쓰레드에 이름을 지정. String setName(String name) 직접 지정하거나 자동으로 부여된 쓰레드의 이름을 가져올 때 사용 String getName() 쓰레드 객체의 속성 다루기 예제 public class ThreadPropertiesTest1 { pu..
자바 프로그램에서의 쓰레드 자바로 작성한 프로그램을 실행하면 메모리로 로딩돼 프로세스 상태가 된다. .class 파일을 실행하면 자바 가상 머신은 main 쓰레드를 생성한다. 즉, 프로그램이 처음 실행되면 시작 지점에서 main쓰레드 1개만이 존재한다. main()메서드에서 작성한 내용이 바로 이 main쓰레드에서 동작한다. mian쓰레드의 내부에서 2개 이상의 쓰레드를 생성해 실행하면 동시에 N개 이상의 쓰레드가 동작하게 되는데, 이를 멀티 쓰레드라고 한다. 멀티 쓰레드의 필요성 만약 FPS게임을 하고 있다고 가정하자 총을 연발로 5발을 쐈을 때 쏘는 화면과 발사 소리를 출력한 것을 나타낸 것이다. public class TheNeedForThread { public static void main(St..
throws 예외를 처리하지 않고 예외처리의 의무를 호출한 메서드에게 전달한다. 예외를 다음과 같이 전달하면 된다. 예외 전가 구조 리턴 타입 메서드명(입력매개변수) throws 예외 크래스명 { // 예외 발생 코드 } a()메서드에서 b()메서드를 호출하고, b()메서드 내부에 예외가 발생할 수 있는 코드가 포함돼 있을 때를 살펴보자 void a(){ b(); // 1.호출 } // 2. 예외 처리 void b(){ try{ //예외 가능 블록 } catch (예외 클래스 타입 참조 변수) { //예외 처리 } } b()메서드가 스스로 예외를 처리했을 때 b() 메서드가 직접 예외 처리를 했다. 이때 a()메서드가 b()를 호출하여 사용하는데 문제가 없다. void a(){ try{ b(); // 1..
리소스 자동 해제 예외 처리 finally{} 블록은 '항상 실행해야 하는 기능이 있을 때 사용하는 블록' 이다 finally{} 블록의 가장 대표적인 기능은 리소스를 해제하는 것이다. (자원반납) 예를들어 수정하기 위해 열어둔 파일이 있다면 이 파일을 닫아야 다른 프로그램이 이 파일을 사용할 수 있다. 메모리에 엄청난 크기의 객체를 만들어 놓고 사용했을 때도 사용이 완료되면 메모리 공간을 확보하기 위해 리소스를 해제해야 한다. 자바에서 리소스해제가 꼭 필요한 대표적인 예로 자바 입출력 리소스를 들 수 있다. 다음 예제를 살펴보자 InputStreamReader is = null; try { is = new InputStreamReader(System.in); System.out.println(is.re..
White Asher
'Language' 카테고리의 글 목록 (2 Page)