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 |