목록Computer Engineering/Java (14)
Inor
Synchronized 자바의 Thread Class의 사용 방법에대해 학습 하면서 간단하게 synchronized 키워드를 알아봤습니다. 동기화가 필요한 경우에 사용하는 키워드로서 synchronized block에서 다른 스레드가 작업을 수행중일 경우에 다른 스레드가 이 영역의 작업을 수행하지 못하도록 하는 키워드 였습니다. 이 글에서는 synchronized을 사용할 경우 주의해야되는 상황에대해서 알아보도록 하겠습니다. 먼저 아래 코드의 코드를 확인 해보겠습니다. package threadTest; class TestObj{ public void methodA(int id){ for(int i=0;i
Thread(스레드) 프로세스란 메모리에 올라와 cpu를 할당 받으면서 운영체제에의해서 실행되고 있는 프로그램이라는 뜻 입니다. 이런 프로세스를 구성하고 있는 단위를 스레드라고 칭합니다. JAVA에서는 기본적으로 하나의 메인스레드를 제공하고 필요에 따라서 여러개의 스레드를 만들어서 사용할 수 있습니다. 그렇다면 여러개의 스레드를 만들어서 사용하는 이유가 궁금할 수 있습니다. 그 이유는 간단하게 말하면 멀티태스킹을 가능하게해서 프로세스의 효율을 높이기 위한 것 입니다. 하지만 프로세스의 성능을 높이기 위해서 너무 많은 스레드를 생성 하게되면 Context Switch 때문에 오히려 효율이 떨어지게 됩니다. 만약에 1인 쉐프로 운영이 되는 레스토랑이 있다고 생각해 봅시다. 쉐프는 주문, 요리, 설거지를 해야..
Static 메서드 오버라이딩 static 메서드는 클래스 메서드라고도 불리는 특정 클래스의 객체들이 공유하는 메서드 입니다. static 메서드는 런타임시에 생성 되는 것이 아니라 컴파일시에 생성 되고 메모리에 적재되는 형식 입니다. 그렇기 때문에 런타임시에 해당 메서드를 구현한 실제 객체를 찾아가서 호출을 합니다. 이것을 다형성이라고 합니다. 그러나 static 메서드는 컴파일시에 선언된 객체의 메서드를 찾아 호출 합니다. static 메서드에대해서는 다형성이 적용되지 않습니다. class Car{ public void accelate(){ System.out.println("일반 엔진 사용"); } public static void stop(){ System.out.println("일반 브레이크 사..
자바에서는 OOP의 다형성이라는 특징을 지원하기 위해서 Overloading과 Overriding이라는 방법을 지원 합니다. 비슷한듯 완전 다른 두 방법을 한국어로 풀어서 써 보면 메서드의 중복(Overloading)과 메서드의 재정의(Overriding)라고 할 수 있습니다. 간단히 설명하면 아래와 같이 두 개념을 정의할 수 있습니다. Overloading : 같은 클래스에서 같은 이름의 메서드를 여러개 만들어서 사용할 수 있도록 해주는 방법Overriding : 부모 클래스를 상속 받은 자식 클래스에서 부모 클래스의 메서드를 자식 클래스에 맞게 재정의 하는 방법 Overloading 오버로딩을 설명하기 전에 아래의 예제 코드를 확인 하겠습니다. 아래의 코드는 메소드 오버로딩의 필요성을 어필하기 위한 ..
Garbage Collection C와 C++을 공부 해봤던 사람이라면 객체나 메모리를 할당 할때 특정 명령어(malloc, new)를 사용하는 것을 알고 있을 것 입니다. 그리고 메모리를 해제하는 명령어(free, delete) 사실을 알고 있을 것 입니다. 그러나 자바에서는 개발자가 객체를 생성하는 것은 가능하지만 메모리에 할당된 객체를 삭제하는 것은 허락하지 않습니다. 자바가 추구하는 것들 중 하나가 메모리 관리의 편리성이기 때문이라고 알고 있습니다. Stop-The-World 자바는 멀티 스레드 환경이고 Garbage Collection 또한 특정 스레드에서 동작 하게 됩니다. Garbage Collection이 실행 될 때 애플리케이션의 모든 스레드는 정지하고 Garbage Collection ..
클래스 로더는 컴파일러에의해서 컴파일된 *.class 파일의 자바 바이트 코드를 읽어서 JVM의 Execution Engine이 사용할 수 있도록 Runtime Data Area에 적재하는 역할을 하는 부분 입니다. 각각의 클래스 로더들은 부모와 자식 형태인 계층적인 모델을 취하고 있고 가장 최상위 클래스 로더는 Bootstrap Class Loader 입니다. 클래스를 로드 할때는 parent-first/child-last의 순서로 로드 합니다. 캐시->부모->자식의 순서로 클래스 로딩이 됩니다. 먼저 캐시에 해당 클래스가 있는지 확인하고 없을 경우에 부모 클래스 로더로 가서 부모 클래스 로더의 캐시를 확인하고 없을 경우에 다시 부모의 부모 클래스에게 요청하는 방식으로 클래스를 로딩 합니다. 또한, 자..