본문 바로가기

JAVA

자바 / OOP / 객체 / 클래스 / 인스턴스 / JVM 메모리구조

자바

제임스 고슬링 개발

객체지향 언어

OS에 붙어서 실행되는 것이 아니라 JVM 위에서 실행되기 때문에 OS의 제약이 없음

JVM이 OS에 맞게 알아서 변환해서 전달해줌

 

 

객체지향 언어 (Object Oriented Programing)

객체 단위로 쪼개서 프로그래밍 하는 것 -> 코드의 재사용성 + 중복 제거

but, 처리 속도가 상대적으로 느리다는 점과 설계 시에 많은 시간과 노력이 필요하다는 단점이 있음

 

- 캡슐화

비슷한 속성과 기능을 하나의 클래스로 묶은 것

그리고 클래스 내부를 외부에 공개하지 않음으로써 이 클래스를 맘대로 수정하지 못하게 함 - 정보 은닉

객체의 멤버 변수는 private로 설정하여 외부에서 getter/setter로만 접근 가능하도록 함 - 객체의 무결성 보장

 

- 상속

부모 클래스의 필드와 메서드를 자식 클래스에서 그대로 물려 받는 것

코드의 재활용으로 생산성이 높아짐 - 재사용과 확장

 

- 추상화

객체의 필수 속성만을 정해두고 실제 구현은 각 객체에 따라 다르게 구현될 수 있도록 함 - 모델링

속성만 존재하고 내용은 텅 빈 클래스라고 생각하자

 

- 다형성

하나의 객체가 여러가지 타입을 가질 수 있는 것

부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있는 것

List list = new ArrayList();

Map map = new HashMap();

 

 

객체 / 클래스 / 인스턴스

객체: 소프트웨어 세상에 구현할 대상. 모든 것이 대상이 될 수 있음. 

클래스: 구현할 대상에 대한 구체적 정보가 담겨져 있는 설계도

인스턴스: 구현할 대상이 실제 구현된 상태

 

TV로 예를 들어보자.

TV가 있다. 이것은 객체다.

TV를 만드는 설계도가 있겠지? 이 설계도에는 크기, 색상, 기능 구현하는 법 등이 담겨있을거야.

그럼 TV는 TV 설계도를 보고 만들어질거야.

설계도를 보고 완성된 TV가 바로 인스턴스.

 

 

JVM의 메모리 구조

- 메서드 영역

클래스 정보와 클래스 변수가 저장되는 곳 = static 메서드와 변수가 저장

 

- 호출 스택

메서드의 작업 공간. 지역 변수가 담기는 곳

메서드가 호출되면 메서드 수행에 필요한 메모리 공간을 할당받고 메서드가 종료되면 사용하던 메모리를 반환.

 

- 힙

인스턴스가 생성되는 공간 = 메모리

인스턴스 변수가 저장되는 공간

new 연산자에 의해서 생성되는 배열과 객체는 모두 힙에 생성

 

즉, 메서드 영역에 존재하는 static 변수, 힙 영역에 존재하는 인스턴스 변수, 호출 스택에 존재하는 지역 변수

'JAVA' 카테고리의 다른 글

BufferedReader / BufferedWriter / StringTokenizer  (0) 2020.12.22
JDK / JRE / JVM  (0) 2020.12.17
오류(error)와 예외(exception)  (0) 2020.12.10
Iterator 인터페이스  (0) 2020.12.04
ArrayList  (0) 2020.10.13