평행코드

객체와 클래스 (인스턴스 필드와 클래스필드의 차이) 본문

Java

객체와 클래스 (인스턴스 필드와 클래스필드의 차이)

나의 오류는 누군가 겪었던 오류 2023. 9. 5. 16:44
클래스의 등장 배경

- 객체의 특성에 대한 정의를 한 것으로 캡슐화를 통해 기능을 포함한 개념,

사물이나 개념의 공통 요소를 추상화(abstraction)하여 정의

ex) 제품의 설계도, 빵 틀

 

클래스는 설계도

객체는 제품

 

추상화

- 유연성을 확보하기 위해 구체적인 것은 제거한다는 의미

프로그램에서 필요한 공통점을 추출하고,

불필요한 공통점을 제거하는 과정 (머리색이나 신체조건등...불필요한내용들제거)

 

구체화되어있는정보들을 뽑아서 정보를 만든다.

구체화되어있다는 것은 키 몸무게 각종 자세한 내용들을 다 알고 있어야하는데,

그런 정보는 필요가 없기 때문에 추상화를 시킨다

 

캡슐화

캡슐화 (Encapsulation)  +  (정보은닉)

데이터를 감춰놓고 내가 원하는 시점에 데이터를 이용할 수 있는 기능을 사용해서 이용하게끔 하는 것

 

- 캡슐화의 원칙

1. 클래스의 멤버 변수에 대한 접근 권한은 private을 원칙으로 한다.

2. 클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 함수들을클래스 내부에 작성한다.

3. 멤버 함수는 클래스 밖에서 접근할 수 있도록 public으로 설정한다.

 

클래스 접근제한자

public : 같은 패키지 내 전체에서 사용가능

접근제한자를 쓰지 않으면 같은 패키지 안에서만 사용가능

 

필드 = 멤버변수

저장할 수 있는 영역

 

초기화블럭
public class InitialTest {
	public int no = 0; // 인스턴스 필드
    	private static int count = 0; // 클래스 필드
}
	{
    	no = ++InitialTest.count;
    }
public class InitialMain {

	public static void main(String[] args) {
		InitialTest it = new InitialTest();
		System.out.println("it " + it.no+ " " + it.age +" " + it.name 
				+" " + it.height);
		InitialTest it2 = new InitialTest();
		System.out.println("it2 " + it2.no+ " " + it2.age +" " + it2.name 
				+" " + it2.height);
	}

}

no++ 이렇게하면 새로운 인스턴스를 생성해도 1밖에 나오지 않았음

no = ++InitialMain.count 이렇게하면 1, 2 이런식으로 증가된값이 잘 나왔다.

 

왜 이런 현상이 일어나냐면 인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로

인스턴스마다 각기 다른 주소값을 가지지만, 

정적 변수는 모든 인스턴스가 하나의 저장공간을 공유하고,

항상 같은 값을 가지기에 나타난 현상이기 때문이다.

'Java' 카테고리의 다른 글

메소드 Getter와 Setter  (0) 2023.09.07
배열과 2차원 배열  (0) 2023.09.06
Java) 가위바위보게임 만들기!  (0) 2023.09.03
Java) 몬스터를 사냥하는 게임을 만들어보자!  (0) 2023.09.03
조건문  (0) 2023.09.01