클래스와 객체의 구분
- 생물에게는
나이가 어떻게 되나요
- 무생물에게는
제조일자가 어떻게 되나요?
위 2가지 질문으로 클래스와 객체를 구분할수 있다는데..
객체와 클래스 차이
- 객체
- 실제로 존재하는
유일무이한 실체
- 특정한 속성에 값을 가지고 있음.
- 실제로 존재하는
- 클래스
- 개념적인
분류 체계
- 속성 자체에는 값을 가질 수 없다.
- 개념적인
예외 상황
- 하지만..
- 제리의 꼬리가 몇개?
- 1개
- 쥐의 꼬리는 몇개?
- 1개
- 미키마우스의 꼬리는 몇개?
- 1개
- 모두 답이 한 개이다.
제리
와미키마우스
는 객체이기에 꼬리 개수에 답이 존재하는 것이 당연하지만..
쥐
는 클래스 인데도 꼬리 개수에 대한 답이 존재한다.
이는 꼬리 개수가 객체의 속성이지만, 모든 객체가 동일한 값을 가지는 경우, 클래스에서도 해당 값을 알 수 있게 되기 때문이다.
- 제리의 꼬리가 몇개?
- 그렇다면, 객체마다 모두 같은 값을 가진다고 확신한 순간.
- 클래스 자체에 해당 값을 저장하는게 메모리적으로 효율적이라고 생각될 수 있다.
클래스에서의 속성의 관리
- 그렇다면 countOfTail 을 클래스에서 관리한다고 생각해보자!
public class Mouse {
public String name;
public int age;
public static int countOfTail = 1;
public void sing() {
System.out.println("찍찍");
}
}
- T메모리 상의 스태틱 영역에 하나의 저장 공간을 가지게 됨.
public class MouseDriver {
public static void main(String[] args) {
Mouse.countOfTail = 1;
Mouse mickey = new Mouse();
Mouse jerry = new Mouse();
Mouse mightyMouse = new Mouse();
System.out.println("mickey = " + mickey.countOfTail);
System.out.println("jerry = " + jerry.countOfTail);
System.out.println("mightyMouse = " + mightyMouse.countOfTail);
System.out.println(Mouse.countOfTail);
}
}
- 출력
mickey = 1
jerry = 1
mightyMouse = 1
1
Static 키워드
- 클래스 멤버
- 클래스 멤버는
static
키워드를 사용하여 정의됨
- 이를 통하여 Mouse.countOfTail 같은 형식으로 접근 가능하며
main()
메서드도static
키워드를 포함하므로 클래스 멤버 메서드
- static 영역에 저장되며, 프로그램의 모든 객체에서 동일한 값 공유
- 클래스 멤버는
- 객체 멤버
static
키워드 없이 정의
- 객체 참조변수를 통해 접근
- 각 객체마다 독립적인 값을 가짐
Mouse.java
코드상의sing()
메서드
정적 멤버와 인스턴스 멤버
- 클래스 멤버 == static 멤버 == 정적 멤버
- 객체 멤버 == 인스턴스 멤버
정적 멤버 속성의 활용
- 사람 클래스의 인구
- 고양이 클래스의 다리개수
- 승용차 클래스의 바퀴 개수 등…
이러한 속성들은 모든 객체에서 공통적으로 사용되기에, 정적 멤버로 선언하는 적합지만..
사용할땐 주의해야한다..!
정적 메서드?
- 객체의 존재여부와 관계없이 사용가능한 메서드
정적 메서드의 특징
정적 메서드의 독립성
- 정적 멤버들은 객체보다 클래스에 속해 있음.
- 따라서, 객체의 존재 여부에 관계없이 사용가능
- JVM 구동시 T 메모리의
정적 영역
==클래스 영역
==static 영역
에 바로 배치됨
메인 메서드의 특성
main()
메서드는 JVM 이 시작할 때 호출되는 진입점
- JVM 구동 시 객체는 존재하지 않기에,
main()
메서드는 정적 메서드여야함.
정적 메서드의 활용
- 함수 분할
main()
메서드의 로직을 여러 함수로 나누어 관리하는 경우
- 접근자와 설정자 메서드
- 정적 변수를 위한 getter | setter 메서드로 활용가능
- 유틸리티성 메서드
- 인스턴스 생성 없이 메서드를 사용하려는 경우
Math
클래스의 수학관련 정적 메서드들
UML 상의 정적 변수 혹은 메서드
- 정적 속성의 메모리 할당
- T 메모리 스태틱 영역에 클래스가 배치될 시, 메모리 공간이 확보됨
다양한 변수의 유형 및 용어
- 용어의 혼용
- 클래스 멤버 == 정적 멤버 == 스태틱 멤버
- 객체 멤버 == 오브젝트 멤버 == 인스턴스 멤버
- 필드 == 속성 == 프로퍼티
- 함수 =?= 메서드 (사실상 혼용임)
- 변수 공간 =?= 메모리 공간
- 지역 변수와 초기화
- 지역 변수
- 스택 영역에 저장
- 초기화되지 않는 경우 쓰레기 값이 저장됨
- 자바 컴파일러는 지역변수 초기화를 무조건 강제함
- 멤버 변수와 초기화
- 멤버 변수는 클래스 || 객체에 속함
별도의 초기화 없이도 기본값으로 설정됨
- 왜??
- 멤버 변수가 다수의 메서드나 객체 내에서 공유됨.
- 객체 변수는 객체 내에서
- 클래스 변수는 프로그램 어디서든 접근 가능한 공유 변수로 동작
- 지역 변수
변수의 유형
이름 | 다른 이름 | 사는 곳(T 메모리) |
static 변수 | 클래스 [멤버] 속성, 정적 변수, 정적 속성 | 스태틱 영역 |
인스턴스 변수 | 객체[멤버] 속성, 객체 변수 | 힙 영역 |
local 변수 | 지역변수 | 스택 영역(스택 프레임) |
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[3단원]다형성: 사용편의성 (0) | 2023.08.25 |
---|---|
[3단원]상속은 is a 관계를 만족해야 한다? (0) | 2023.08.25 |
[3단원]상속의 강력함 (0) | 2023.08.22 |
[3단원]상속: 재사용 + 확장 (0) | 2023.08.22 |
[3단원]추상화와 T 메모리 (0) | 2023.08.20 |