Java (54) 썸네일형 리스트형 [Java] 인스턴스 생성과 생성자 호출 및 실행 과정 - Bytecode 실행과 Runtime Data Area의 변화 (2) 앞선, 1. 클래스 파일(.class)의 메모리 로드 과정 내용에 이어서 인스턴스(Instance) 생성과 생성자(Constructor) 호출 및 실행 과정을 다룰것이다. 생성자에 대한 내용은 Constructor에 설명되어있다. [Java] 1. 클래스 파일의 메모리 로드 과정 - Bytecode 실행과 Runtime Data Area의 변화OverviewJava 프로그램이 실행되면서 JVM의 메모리 구조는 어떻게 변화할까 궁금하였다. 해당 과정을 이해하기 위해, 바이트 코드를 명령어와 JVM의 Runtime Data Area와 맵핑시키면서 분석하였다. 또한devjohnpark.tistory.com Instance 생성소스코드 중, AddExample addExample = new AddExample(.. [Java] 클래스 파일의 메모리 로드 과정 - Bytecode 실행과 Runtime Data Area의 변화 (1) OverviewJava 프로그램이 실행되면서 JVM의 메모리 구조는 어떻게 변화할까 궁금하였다. 해당 과정을 이해하기 위해, 바이트 코드를 명령어와 JVM의 Runtime Data Area와 맵핑시키면서 분석하였다. 또한 클래스 파일(.class)에는 어떤 데이터가 저장되어 있고, 메서드 영역에 로드된 이후에는 어떻게 변화되는지도 파악할 수 있었다.사람이 읽을 수 있는 형태의 바이트 코드로 변환Java Source Code아래는 Main 클래스의 main 메서드에서 AddExample 인스턴스를 생성하고 add메서드를 호출하여 반환값을 받는 코드이다. 바이트 코드 분석을 위해서 간단한 코드로 진행하였다.public class Main { public static void main(String[].. [Java] 변수의 초기화 초기화 되지 않은 변수 읽기변수를 읽을때 값이 저장되어있지 않으면, 컴파일 에러를 발생한다. 아래의 사진에서 보다시피, 초기화 되지 않는 변수 num를 선언 후에 읽어 들인다면 빌드가 실패한다. java: variable num might not have been initialized 변수가 초기화 되지 않았다는 에러문을 볼 수 있다. build failed 에러를 살펴보면, compile failed errors: 1을 볼수 있다. 컴파일 에러가 발생한 것이다. 메모리 해제가 안된 메모리 공간을 할당 받을 수 있어, 변수 선언 후 초기화하지 않을시에 예상치 못한 값이 저장되어 있을수 있다. 그 값을 garbage value(쓰레기값)이라고 한다. 따라서 변수를 사용전에 항상 초기화를 해야한다. 해당.. [Java] 생성자 (Constructor) 생성자(Constructor) 개념과 하는일생성자(Constructor)는 인스턴스가 생성될때 호출 되는 인스턴스 초기화 메서드이다. 주로 인스턴스 변수의 초기화 작업에 사용되며, 인스턴스 생성시에 실행되어야 할 작업을 위해서도 사용된다. 생성자도 메서드이기 때문에, 구조도 메서드랑 거의 비슷하지만 리턴값이 없다. 따라서 void 키워드도 메서드명 앞에 붙지 않는다. 그리고 생성자 이름은 클래스 이름과 동일해야한다.class Coffee { // Constructor (생성자) Coffee() { } public static void main(String[] args) { Coffee coffee = new Coffee(); System.o.. [Java] 오버로딩 (Overloading) 오버로딩의 개념과 예제하나의 클래스 내에 메서드 이름이 같아도, 매개 변수가 다르면 메서드를 구별할수 있다. 컴파일러(Compiler)는 메서드를 호출할때, 메서드 이름과 매개변수로 분류하기 때문이다. 정확히는 메서드 이름이 동일하여도, 매개변수의 개수 또는 타입이 다르면 메서드를 정의할 수 있다. 따라서 해당 조건이 만족하지 않으면 컴파일 에러를 발생한다. 그리고 반환 타입은 오버로딩을 구현하는데 상관이 없다. 클래스의 코드가 로딩될때, 하나의 메서드 이름으로 다른 여러 기능을 하는 메서드들을 같이 로딩할수 있어서 오버로딩(overloading)이라고 한다. 인풋값이 달라지게 되면 다른 기능으로 보는 것이다. 다음 코드와 같이, 매개변수 개수 또는 타입이 다른 경우에는 오버로딩이된다. 인자(argume.. [Java] 메서드 (Method) Method란?클래스(Class) 내의 함수(function)를 메서드(method)라고 부른다. method의 사전적의미는 어떤 결과물을 내기 위한, systematic procedure(절차)이다. 예를 들면, 카페의 알바생이 블루베리 스무디를 만들려고 한다. 카페에서 제공하는 레시피를 보고서, 필요한 재료를 넣고 일련의 과정대로 수행을 하면 블루베리 스무디가 만들어진다. 그 레시피가 메서드이다. 이처럼, 알바생은 어떻게 블루베리 스무디를 만들어지는 원리를 모르는 상태에서도 방법만 알면 쉽게 만들수 있다. 알바생은 그저 재료(input)을 넣고 일련의 과정을 수행하면 원하는 블루베리 스무디(output)값을 설계한 것이 메서드이다. 이러한 블루베리 스무디 레시피를 만들어 놓으면 어떤 알바생이건 몇 번.. [Java] 메서드의 종류와 호출 과정 및 디스패치 Instance Method 호출 과정인스턴스 메서드의 메서드 호출 과정을 자세히 짚어보자면 다음과 같다.인스턴스의 실제 클래스 타입에 찾는 메서드가 정의되어 있으면 그 메서드를 호출한다.만약 인스턴스가 속한 클래스에 해당 메서드가 없으면, 상위 클래스로 올라가면서 메서드를 찾는다.JVM은 상속 계층을 따라 부모 클래스로 올라가며 메서드를 찾을 때까지 반복적으로 수행한다.그러므로 상속 계층이 깊어질수록, 메서드를 찾기 위해 부모 클래스, 조부모 클래스 등 상위 클래스까지 검색하는 작업이 추가되므로 검색 오버헤드가 발생할 수 있다. 게다가, java는 단일 상속을 사용하지만, 인터페이스 구현으로 인하여 인터페이스 다중 상속으로 메서드 검색 과정이 복잡해질 수 있다. 그리하여 JVM은 다중 상속을 지원하는 .. [Java] 선언에 따른 변수의 종류 JVM의 메모리 공간과 변수Java 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리를 한다. JVM의 메모리 공간(Runtime Data Area)은 크게는 Method Area, Stack, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당 되게 된다. 변수는 선언 위치에 따라서 멤버변수(Member Vaiable)와 지역변수(Local Variable)로 구분된다. 멤버 변수에는 클래스 변수(Class Variable)와 인스턴스 변수(Instance Variable)가 있다. 멤버 변수에 static을 붙이면 클래스 변수이고 않붙이면 인스턴스 변수이다. 지역변수는 메서드 내에 선언된 변수로.. 이전 1 2 3 4 5 6 7 다음