Inor
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의 순서로 로드 합니다. 캐시->부모->자식의 순서로 클래스 로딩이 됩니다. 먼저 캐시에 해당 클래스가 있는지 확인하고 없을 경우에 부모 클래스 로더로 가서 부모 클래스 로더의 캐시를 확인하고 없을 경우에 다시 부모의 부모 클래스에게 요청하는 방식으로 클래스를 로딩 합니다. 또한, 자..
가상 머신(VM) 가상 머신이란 프로그램을 실행 하기 위한 물리적 머신(컴퓨터)과 유사한 머신을 소프트웨어로 구현한 것이라고 할 수 있습니다. 자바의 목표 였던 WORA(Write Once Run Anywhere)을 구현하기 위해서 JVM(자바 가상 머신)이라는 것을 만들었습니다. 따라서 자바 코드를 컴파일 한 파일은 갖고 있으면 같은 환경의 JVM이 있는 하드웨어에서 해당 코드를 실행 시킬수 있다는 뜻 입니다. JVM 명세를 따르기만 한다면 어떤 벤더든 JVM을 만들어서 배포 할 수 있습니다. JVM의 특징 스택 기반 : JVM은 레지스터 기반이 아닌 스택 기반의 아키텍처 입니다.심볼릭 레퍼런스 : 기본 자료형의 경우를 제외한 모든 타입(클래스, 인터페이스)의 경우에 메모리 주소 기반의 참조가 아닌 심..
객체지향 프로그래밍(OOP)란 기존의 절차지향 언어들의 한계점과 단점을 보완하고자하는 생각에서 출발한 패러다임 입니다. 이 객체지향 프로그래밍에는 추상화, 캡슐화, 다형성, 상속성 이라는 특성을 갖고 있습니다. 각각의 특성들에대해서 살펴 보면서 객체지향 프로그래밍이 어떻게 구성되어야 하는지 확인해보도록 하겠습니다. 1. 추상화 추상화란 공통된 행위를 갖고 있는 객체들을 대표 할 수 있는 클래스로 선언하는 것 입니다. 객체지향의 관점에서 클래스를 설계하는 것을 추상화하는 것이라고 할 수 있습니다. 예를 들어서, 아이폰, 갤럭시, 효도폰 이라는 것이 프로그램에서 필요할 때 이것들을 전부다 클래스로 만들어서 사용하는 것은 비효율 적인 방법 입니다. 위의 제시된 것들은 분명 중복되는 기능(전화 걸기, 전화 받기..