JAVA/JAVA 기본정리

클래스의 정의/ 변수와 메서드/ 클래스변수/ 인스턴스 변수/ 지역변수

hyun-1200 2022. 3. 1. 11:31

 

클래스의 관점 

  1. 설계도
  2. 데이터+ 함수
  3. 사용자 정의 

클래스의 또 다른 정의 

: 클래스는 데이터와 함수의 결합의 의미를 가진다. 또는 사용자정의 타입의 의미도 있다. 

프로그래밍 언어에서 데이터 처리를 위한 데이터 저장 형태의 발전과정은 아래와 같다.

 

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

 

인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른값을 유지한다.
클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.