클래스의 관점
- 설계도
- 데이터+ 함수
- 사용자 정의
클래스의 또 다른 정의
: 클래스는 데이터와 함수의 결합의 의미를 가진다. 또는 사용자정의 타입의 의미도 있다.
프로그래밍 언어에서 데이터 처리를 위한 데이터 저장 형태의 발전과정은 아래와 같다.
1. 변수 : 하나의 데이터를 저장할 수 있는 공간
2. 배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체 : 서로 관련된 여러 데이터 (종류관계 X)를 하나로 저장할 수 있는 공간
4. 클래스 : 데이터와 함수의 결합 ( 구조체+ 함수)
클래스를 사용함으로서 더 객체지향적인 언어를 사용할 수 있다.
변수와 메서드
변수는 클래스변수, 인스턴스 변수, 지역변수 세종류가 있다. 변수의 종류를 결정짓는 중요한 요소는 ' 변수의 선언된 위치'이다.
멤버변수 는 클래스 변수와 인스턴스 변수가 있는데, 클래스변수는 static이 붙은 것이고, static이 붙지 않은 것이 인스턴스 변수이다.
멤버변수를 제외한 나머지 변수를 모두 지역변수라 한다.
변수의 종류 | 멤버변수/ 지역변수 | 선언위치 | 생성시기 |
클래스 변수 | 멤버변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | 인스턴스가 생성될 때 | ||
지역 변수 | 지역변수 | 클래스 영역 이외의 영역 | 변수 선언문이 수행될 때 |
1.클래스 변수 : 클래스영역에서 선언되고, 생성시기는 클래스가 메모리에 올라갈때 생성된다.
- 인스턴스 앞에 static을 붙이면 된다.
- 클래스 변수는 모든 인스턴스가 공통된 저장공간을 공유하게 된다.
- 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야 하는 속성의 경우, 클래스 변수로 선언해야 한다.
- 인스턴스를 생성하지 않고 언제든 바로 사용할 수 있으며, '클래스이름.클래스변수' 와 같은 형식으로 사용한다.
- ex. 위의 소스 예제에서는 MethodTest.cv 와 같이 사용한다.
- 클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때 까지 유지되며, public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 '전역변수'의 성격을 갖는다.
2. 인스턴스 변수 : 클래스영역에서 선언되고, 생성시기는 인스턴스가 생성될때 생성된다.
- 인스턴스 변수의 값을 읽어오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 한다.
- 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
3. 지역변수 : 클래스영역 이외의 영역에서 선언되고(메서드영역, 메서드생성자, 초기화 내부블록), 변수 선언문이 수행되었을 때 생성된다.
- 메서드 내에 선언되어 메서드 내에서만 사용 가능하며, 메서드가 종료되면 소멸되어 사용할 수 없게 된다.
클래스 변수 vs 인스턴스 변수 가 아직도 헷갈린다면
위의 카드에서 카드의 폭과 높이는 공통적인 속성이지만, 무늬나 숫자는 서로 다른 값을 가진다.
-> 공통적인 속성 : 카드의 폭, 높이 ➡️ 클래스 변수 (static 변수)
-> 개별적인 속성 : 무늬, 숫자 ➡️ 인스턴스 변수
클래스 변수인 width와 height는 같은 값을 공유하기 떄문에, 변경하면 동시에 변경되는 것을 볼 수 있다.
Card.width= c1.width = c2.width
인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른값을 유지한다.
클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.
'JAVA > JAVA 기본정리' 카테고리의 다른 글
생성자에서 다른 생성자 호출하기/ 참조변수 this와 생성자 this() (0) | 2022.04.26 |
---|---|
생성자 ( Constructor) / 기본생성자/ 매개변수가 있는 생성자 (0) | 2022.04.25 |
오버로딩 (overloading) / 가변인자(varargs) : 매개변수 개수를 동적으로 사용할 수 있는 기능 (0) | 2022.04.25 |
클래스메서드(static 메서드) 와 인스턴스 메서드 / 클래스멤버와 인스턴스멤버간의 참조와 호출 (0) | 2022.04.25 |
객체지향 언어 OOP ( object oriented programming) (0) | 2022.03.01 |