Java의 특징 및 구조
자바의 특징
- 이식성이 높은 언어
- 객체 지향 언어(Object Oriented Programming)
- 함수적 스타일 코딩을 지원
- 메모리를 자동으로 관리(Garbage Collector)
- 다양한 애플리케이션 개발 가능(Windows, Mac, Linux, Unix …)
- 멀티스레드 쉽게 구현 가능
- 동적 로딩 지원(필요한 객체만 생성되기 때문에 유지보수 쉽고 빠름)
- 오픈소스 라이브러리 많음
JVM(Java Virtual Machine: 자바 가상기계)
Java 메모리 영역(Runtime Data Area)
- 메소드 영역(Method Area) 코드에서 사용되는 클래스(*.class)들을 클래스 로더로 읽어 클래스 별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장한다. 메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
- 힙 영역(Heap Area) 객체와 배열이 생성되는 영역. 힙 영역에서 생성된 객체와 배열은 JVM 스텍 영역의 변수나 다른 객체의 필드에서 참조한다. 참조하는 변수나 필드가 없으면 쓰레기(Garbage)로 취급하고 Garbage Collector를 실행시켜 힙 영역에서 제거한다.
- JVM 스텍 영역 스레드마다 한 개씩 존재하며 스레드가 시작될 때 할당된다. JVM 스텍은 메소드를 호출할 때 마다 프레임 프레임을 push 하고 메소드가 종료되면 해당 프레임을 pop 한다.
객체 지향 프로그래밍(OOP: Object Orientied Programming)
객체(Object)란?
실시계에 존재하는 모든 것
값(Data) - memberData, Field
동작(Operation) - constructor, method, member, opertation
객체지향 프로그래밍 특징
캡슐화 : 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것
상속 : 부모 역할의 상위 객체와 자식 역할의 하위객체가 있어 상위 객체가 가지고 있는 필드와 메소드를 하위객체에 물려주어 하위객체가 사용할 수 있도록 한다.
다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다.
객체와 클래스
객체를 생성하기 위한 필드와 메소드가 정의된 클래스를 사용하여 객체르르 생성한다.
클래스로 부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.
즉, 예를 들어 자동차 객체는 자동차 클래스의 인스턴스 이다.
클래스의 구성 맴버
필드(field): 객체의 데이터가 저장되는 곳 (ex. int fieldName)
생성자(constructor): 객체 생성 시 초기화 역할 담당 (ex. ClassName() {...})
메소드(method): 객체의 동작에 해당하는 실행 블록 (ex. void methodName() {...})