본문 바로가기
Java

클래스와 객체, 변수

by 재성스 2023. 8. 28.
반응형

Java 기초 개념에 대한 이해

 

객체지향 프로그래밍(Object-Oriented Programmin, OOP)
- 현실 세계를 모델링하는 듯한 방식으로 소프트웨어를 설계 하는 개발 패러다임 
- 객체지향 프로그래밍은 코드의 재사용성, 유지보수성, 모듈화 등의 장점으로 개발을 보다 효율적으로 도움.


자바 프로그래밍의 기초 용어

 


1. 클래스(Class)

-클래스는 객체를 생성하기 위한 설계도라고 표현할 수 있음
-클래스는 데이터(속성, 필드(즉, 클래스 안에 있는 변수)와 메서드를 정의하는 구조체
-클래스는 주로 객체를 생성하는데 사용되며, 객체들 간에 '공통된 특징'을 나타나는데 활용됨. (객체 지향 프로그래밍의 목적)



2. 객체(Object)

- 클래스가 설계도라면 객체는 클래스라는 설계도 기반으로 실제로 구현된 하나의 존재라고 표현할 수 있음.
- 즉, 클래스에 선언된 필드(인스턴스 변수)와 메서드가 실체화 된 것..
- 객체와 인스턴스는 종종 같은 의미로써 사용되지만 엄격하게 구분을 하면 객체는 모든 '인스턴스'를 가리키는 명칭

 



3. 인스턴스(Instance)
- 클래스를 기반으로 '실체화' 된 객체
- 클래스는 객체의 '설계도'를 작성한 것에 불과하다.
- 클래스를 설계도라고 표현하는 것은 프로그램 실행 시, 인스턴스 변수와 메서드는 선언만 한다고해서 메모리에 실제로 올라가는 것이 아닌 인스턴스를 생성해야만 메모리에 값이 저장되기 때문.
- 단, static이 붙은 변수와 메서드는 인스턴스 생성없이 사용 가능 

 

 


객체와 인스턴스가 구분되는 이유는, 인스턴스는
생성할 때마다 "새로운 메모리 영역"이 만들어지기 때문이다.

Person p1 = new p();
Person p2 = new p();

- 위 예시는 Person 클래스를 기반으로 p1, p2 인스턴스를 생성한 것이다. 
- 동일한 클래스의 인스턴스를 생성했지만 실제로 메모리에는 각각 독립적인 저장 영역이 생긴 것이다. 
- 따라서, 클래스에 선언된 인스턴스 변수 하나만으로  다양한 데이터를 표현할 수 있는 것은 이와 같은 이유이다.(인스턴스 별 각각의 독립적인 저장 공간에 값이 할당되기 때문 )


4. 인스턴스화(Instantiation)

- 클래스 기반의 객체(인스턴스)를 생성하는 '작업'
- 클래스는 실체화되지 않은 설계도이므로, 인스턴스화를 통해 클래스를 사용할 수 있는 것

// 클래스의 인스턴스화
Person p = new Person();

 

 

5. 인스턴스 변수(Instance Variable)
- 클래스의 인스턴스마다 다른 값을 저장하는 변수(클래스에 정의되어 있는 static이 붙지 않은 변수)
- 객체의 상태를 나타내는 데이터를 저장하는 역할을 함.

 


6. 클래스 변수(Class Variable)
- 클래스 변수는 해당 클래스의 모든 인스턴스들이 "공유"하는 변수
- 즉, 같은 클래스의 모든 인스턴스들이 동일한 클래스 변수를 참조한다.
-  static이라는 키워드가 있으면 클래스 변수
- 클래스 변수는 인스턴스를 만들지 않아도 사용할 수 있다.

 

7. 지역 변수
- 메서드, 생성자 블럭 내부에 존재하는 변수
- 지역 변수는 메서드가 실행이 되면 실체화 되었다가, 종료되면 없어짐.
- 지역 변수가 블럭 내부에서만 사용 가능한 것도 그 이유 때문.


왜 static이 붙지 않은 인스턴스 변수와 메서드는 인스턴스를 생성해야만 사용할 수 있고, static 멤버는 인스턴스 생성없이 사용 가능한걸까?


- 그 이유는 프로그램이 실행되면 JVM(자바 가상 머신)의 클래스 로더라는 것에 의해 클래스가 읽어지고 static이 붙은 변수들은 메모리에 바로 적재됩니다. (모든 인스턴스가 공유하는 변수이며, 클래스 수준에서 공유되기 때문이다.)


- 반면, 인스턴스 변수는 저장되지 않습니다. (인스턴스가 생성되어 있어야만 적재. / 인스턴스 변수는 각각의 인스턴스마다 독립적인 값을 표현하기 때문에 생성 시에 메모리에 할당되는 것. 효율적인 메모리 관리를 위함)


기본적인 변수의 종류와 생성 시기

변수의 종류 선언 위치 생성 시기
클래스 변수
(Class Variable)
클래스 영역 클래스가 메모리에 올라  
인스턴스 변수
(instance variable)
인스턴스가 생성되었을 
지역변수
(local variable)
클래스 영역 이외의 영역
(메서드 생성자 초기화 블럭 내부)
변수 선언문이 수행되었을 
반응형

'Java' 카테고리의 다른 글

객체 지향 설계의 기본 :: 역할과 구현의 분리  (0) 2023.09.25
익명 객체(Anonymous Object)  (0) 2023.09.04
추상 클래스(abstract class)  (0) 2023.08.30
인스턴스와 변수  (0) 2023.08.09
객체지향 프로그래밍(OOP)  (0) 2023.08.09