Java에서의 Thread 요즘 OS는 모두 멀티태스킹을 지원한다. 멀티태스킹이란? 예를 들면, 컴퓨터로 음악을 들으면서 웹서핑도 하는 것 쉽게 말해서 두 가지 이상의 작업을 동시에 하는 것을 말한다. 실제로 동시에 처리될 수 있는 프로세스의 개수는 CPU 코어의 개수와 동일한데, 이보다 많은 개수의 프로세스가 존재하기 때문에 모두 함께 동시에 처리할 수는 없다. 각 코어들은 아주 짧은 시간동안 여러 프로세스를 번갈아가며 처리하는 방식을 통해 동시에 동작하는 것처럼 보이게 할 뿐이다. 이와 마찬가지로, 멀티스레딩이란 하나의 프로세스 안에 여러개의 스레드가 동시에 작업을 수행하는 것을 말한다. 스레드는 하나의 작업단위라고 생각하면 편하다. 스레드 구현 자바에서 스레드 구현 방법은 2가지가 있다. Runna..
Casting(업캐스팅 & 다운캐스팅) 캐스팅이란? 변수가 원하는 정보를 다 갖고 있는 것 int a = 0.1; // (1) 에러 발생 X int b = (int) true; // (2) 에러 발생 O, boolean은 int로 캐스트 불가 (1)은 0.1이 double형이지만, int로 될 정보 또한 가지고 있음 (2)는 true는 int형이 될 정보를 가지고 있지 않음 캐스팅이 필요한 이유는? 다형성 : 오버라이딩된 함수를 분리해서 활용할 수 있다. 상속 : 캐스팅을 통해 범용적인 프로그래밍이 가능하다. 형변환의 종류 묵시적 형변환 : 캐스팅이 자동으로 발생 (업캐스팅) Parent p = new Child(); // (Parent) new Child()할 필요가 없음 Parent를 상속받은 Chi..
자바 가상 머신(Java Virtual Machine) 시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공함 JVM은, 다른 프로그램을 실행시키는 것이 목적이다. 갖춘 기능으로는 크게 2가지로 말할 수 있다. 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 하는 것 프로그램 메모리를 관리하고 최적화하는 것 JVM은 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 프로그램에 대한 사양임 개발자들이 말하는 JVM은 보통 어떤 기기상에서 실행되고 있는 프로세스, 특히 자바 앱에 대한 리소스를 대표하고 통제하는 서버를 지칭한다. 자바 애플리케이션을 클래스 로더를 통해 읽어들이고, 자바 API와 함께 실행하는 역할. JAVA와 OS 사이에서 중개자 ..
String, StringBuffer, StringBuilder 분류 String StringBuffer StringBuilder 변경 Immutable Mutable Mutable 동기화 Synchronized 가능 (Thread-safe) Synchronized 불가능. 1. String 특징 new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않음 (Immutable) Garbage Collector로 제거되어야 함. 문자열 연산시 새로 객체를 만드는 Overhead 발생 객체가 불변하므로, Multithread에서 동기화를 신경 쓸 필요가 없음. (조회 연산에 매우 큰 장점) String 클래스 : 문자열 연산이 적고, 조회가 많은 멀티쓰레드 환경에서 좋음 2. StringBuffer, S..
Call by value와 Call by reference 상당히 기본적인 질문이지만, 헷갈리기 쉬운 주제다. call by value 값에 의한 호출 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성됨 (종료 시 해당 공간 사라짐) call by value 호출 방식은 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달함 이때 복사된 인자는 함수 안에서 지역적으로 사용되기 때문에 local value 속성을 가짐 따라서, 함수 안에서 인자 값이 변경되더라도, 외부 변수 값은 변경안됨 예시 void func(int n) { n = 20; } void main() { int n = 10; func(n); printf("%d", n); } printf로 출력되는 값은 그대..
자바 컴파일과정 들어가기전 자바는 OS에 독립적인 특징을 가지고 있습니다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분인데요. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하겠습니다. 자바 컴파일 순서 개발자가 자바 소스코드(.java)를 작성합니다. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다. 컴파일된 바이크 코드를 JVM의..