자바의 가장 작은 단위는 클래스이다.
- 자바 프로그램의 메소드는 무소속으로 존재할 수 없다. 무조건 class 안에 포함되어 있어야만 한다.
객체지향 프로그래밍(Object Oriented Programming) : JAVA, C++이 대표적인 객체지향 언어
-
컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉, "객체"들의 모임으로 파악하고자 하는 것이다.
각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있다.
-
기본 구성요소는 클래스(class), 객체(object), 메서드(method)
class : 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(Attribute)과 행위(behavior)를 정의한 것으로 객체지향 프로그램의 기본적인 사용자 정의 데이터형(user defined data type)이라고 할 수 있다.
object : 클래스의 인스턴스(실제로 메모리에 할당 된 것)이다. 객체는 자신의 고유의 속성(attribute)을 가지고 클래스에서 정의한 행위(behavior)를 수행할 수 있다. 객체의 행위를 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다.
method : 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메시지라 할 수 있다. 메서드는 한 객체의 서브루틴형태로 객체의 속성을 조작하는데 사용된다. 또 객체 간의 통신을 메시지를 통해 이루어진다.
(출처 : 위키피디아(객체지향프로그래밍) )
-
JAVA 컴파일 과정
- 자바 컴파일러를 통해서 자바 클래스 파일(.java)를 컴파일하면 자바 바이트 코드(.class)가 생성된다.
( 바이트 코드는 2진수로 채워져 있는 파일을 말한다. )
- 컴파일된 바이트 코드를 클래스 로더로 전달한다.
- 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area), 즉 JVM의 메모리에 올린다.
클래스 로더 세부 동작
a. 로드 : 클래스 파일을 가져와서 JVM의 메모리에 로드한다.
b. 검증 : 자바 언어 명세(Java Language Specification) 및 JVM 명세에 명시된 대로 구성되어있는지 검사한다.
c. 준비 : 클래스가 필요로 하는 메모리를 할당(필드, 메서드, 인터페이스 등등)
d. 분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경된다.
e. 초기화 : 클래스 변수들을 적절한 값으로 초기화한다. (static 필드)
- 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다. 이 때 실행엔진은 두가지 방식으로 변경한다.
a. 인터프리터 : 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나하나의 실행은 빠르나, 전체적인 실행 속도가 느리다는 단점을 가짐.
b. JIT 컴파일러(Just-In-Time Compiler) : 인터프리터의 단점을 보완하기 위해 도입된 방식을 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 해당 메서드를 더 이상 인터프리팅 하지 않고, 바이너리 코드로 직접 실행하는 방식이다. 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 전체적인 실행속도는 인터프리팅 방식보다 빠르다.
( 출처 : https://velog.io/@woo00oo/%EC%9E%90%EB%B0%94-%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EA%B3%BC%EC%A0%95 )
public class Calculator {
public static void main(String [] args) {
System.out.println( "Calculator class started" );
}
}
- 제어자(modifier) : main() 메소드에 있는 public static과 같은 메소드의 특성을 정하는 부분
- 리턴 타입(return type) : 메소드가 끝났을 때 돌려주는 타입
- 메소드 이름(method name) : 소괄호 앞에 있는 메소드 이름
- 매개 변수 목록(parameter list) : 소괄호 안에 있는 매개변수의 목록
- 예외 목록(exception list) : 메소드의 소괄호가 끝나는 부분과 중괄호가 시작하는 부분에 예외를 선언한다
- 메소드 내용(method body) : 중괄호 안에 있는 내용들을 말한다.
- 지역 변수(local variables) : 중괄호 내에서 선언된 변수, 지역 변수를 선언한 중괄호 내에서만 유효하다.
- 매개 변수(parameters) : 메소드에 넘겨주는 변수, 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸된다.
- 인스턴스 변수(instance variables) : 메소드 밖에, 클래스 안에 선언된 변수, 앞에는 static이라는 예약어가 없어야 한다. 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸된다.
- 클래스 변수(class variables) : 인스턴스 변수처럼 메소드 밖에, 클래스 안에 선언된 변수 중에서 타입 선언 앞에 static이라는 예약어가 있는 변수, 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다.