객체지향 프로그래밍의 변수 종류는 3가지가 있다.
변수의 종류 | 선언위치 | 생성시기 | |
멤버변수 O | 클래스 변수 | 클래스 영역 | 클래스가 메모리에 올라갈때 |
인스턴스 변수 | 인스턴스가 생성되었을때 | ||
멤버변수 X | 지역변수 | 클래스 영역 이외의 영역 | 변수 선언문이 수행되었을 때 |
출처 : 자바의 정석
멤버 변수 : class안에 선언된 클래스 변수와 인스턴스 변수를 통들어 멤버 변수라고 부른다.
1. 인스턴스 변수 : 클래스 영역에 선언되며 인스턴스를 생성할 때 만들어 진다.
인스턴스마다 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
인스턴스마다 고유한 상태를 유지해야하는 속성의 경우 인스턴스 변수로 선언한다 (ex 회사의 회사원 이름)
2. 클래스 변수 : 인스턴스 변수에 static을 붙였을때 클래스 변수가 된다.
클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)를 공유한다.
한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 경우 클래스변수로 선언한다 (ex 회사의 회사명)
3. 지역 변수 : 메서드 내에서 선언되어 메서드 내에서만 사용 가능하며 메서드가 종료되면 소멸된다.
지역변수는 선언된 블럭내에서만 사용 가능하며 메서드가 실행될때 생성된다.
사용 예시
class HangHae99 { // 안에 멤버변수가 들어 있다
String position; // 인스턴스 변수
String name; // 인스턴스 변수
int grade; // 인스턴스 변수
static String affiliation = "항해99"; // 클래스 변수
void method() {
int test; // 지역 변수
}
}
public class practice2 {
public static void main(String[] args) {
HangHae99 person1 = new HangHae99();
HangHae99 person2 = new HangHae99();
HangHae99 person3 = new HangHae99();
person1.position = "JAVA";
person1.grade = 10;
person1.name = "영희";
person2.position = "react";
person2.grade = 9;
person2.name = "철수";
person3.position = "Node.js";
person3.grade = 7;
person3.name = "홍길동";
System.out.println(person1.affiliation + "의 " + person1.position+ " " + person1.grade + "기 " + person1.name + "입니다");
System.out.println(person2.affiliation + "의 " + person2.position+ " " + person2.grade + "기 " + person2.name + "입니다");
System.out.println(person3.affiliation + "의 " + person3.position+ " " + person3.grade + "기 " + person3.name + "입니다");
}
}
public class practice3 {
public static void main(String[] args) {
Student s = new Student();
s.name = "홍길동";
s.ban = 1;
s.no = 1;
s.kor = 100;
s.eng = 60;
s.math = 76;
System.out.println("이름 : " + s.name);
System.out.println("총점 : " + s.getTotal());
System.out.println("평균 : " + s.getAverage());
}
}
class Student {
String name;
int ban;
int no;
int kor;
int eng;
int math;
int getTotal() { // 지역변수의 사용 예시
int result = kor + eng + math;
return result;
}
double getAverage() { // 지역변수의 사용 예시
double result = (kor + eng + math) / 3;
return result;
}
}
static 메서드(클래스 메서드) 와 인스턴스 메서드의 사용 예시
static 메서드 ( 클래스 메서드)
인스턴스 메서드
'web > JAVA & Spring' 카테고리의 다른 글
[OOP] 추상클래스와 상속의 차이 (0) | 2022.11.12 |
---|---|
[OOP] 상속 (0) | 2022.11.12 |
[OOP] 메서드 오버로딩(overloading) (0) | 2022.11.12 |
[OOP] 생성자 / this (0) | 2022.11.11 |
[OOP] 메소드의 종류와 메소드 선언 (0) | 2022.11.11 |