1. static 메서드와 인스턴스 메서드 비교
인스턴스 메서드 | static메서드(클래스 메서드) |
인스턴스 생성 후 '참조변수명.메서드명()'으로 호출 | 객체생성 없이 '클래스명.메서드명()'으로 호출 |
인스턴스 변수(iv)와 관련있는 작업을 하는 메서드 | 인스턴스 변수(iv)와 관련없는 작업을 하는 메서드 |
메서드 내 인스턴스 변수(iv) 사용 가능 | 메서드 내 인스턴스 변수(iv) 사용 불가 |
class MyMath {
long a, b; // 인스턴스 변수(iv) a, b 선언
// 인스턴스 메서드
long add() { // 매개변수 없음
return a + b; // 인스턴스 변수 a, b 사용
}
// static(클래스)메서드, 매개변수 사용
static long add(long a, long b) { // 지역 변수 a, b 사용
return a + b;
}
}
class MethodEX {
public static void main (String args[]) {
// static(클래스) 메서드 호출
System.out.println(MyMath.add(200L, 100L));
MyMath mm = new MyMath(); // 인스턴스(객체)생성
mm.a = 200L;
mm.b = 100L;
// 인스턴스 메서드 호출
System.out.println(mm.add());
}
}
2. 메서드 간 호출과 참조
1) static 메서드는 인스턴스 메서드(im) 호출 불가
class TestClass1 {
// 인스턴스 메서드 호출(인스턴스 메서드는 객체 생성 후 호출 가능 -> 호출되었다는 것은 객체가 생성 되었다는 것)
void instanceMethod() {
}
// static 메서드 호출(객체 생성 없이 호출 가능)
static void staticMethod() {
}
// 인스턴스 메서드 호출(인스턴스 메서드는 객체 생성 후 호출 가능 -> 호출되었다는 것은 객체가 생성 되었다는 것)
void instanceMethod2() {
instanceMethod(); // 인스턴스 메서드 호출 가능
staticMethod(); // static 메서드 호출 가능
}
// static 메서드 호출(객체 생성 없이 호출 가능)
static void staticMethod2() {
instanceMethod(); // ERROR, 인스턴스 메서드 호출 불가(인스턴스 메서드는 객체 생성 후 사용 가능)
staticMethod(); // static 메서드 호출 가능
}
}
2) static 메서드는 인스턴스 변수(iv)사용 불가
class TestClass2 {
int iv; // 인스턴스 변수(객체 생성 후 사용 가능)
static int cv; // static 변수(언제나 사용 가능)
// 인스턴스 메서드 호출(인스턴스 메서드는 객체 생성 후 호출 가능 -> 호출되었다는 것은 객체가 생성 되었다는 것)
void instanceMethod() {
System.out.println(iv); // 인스턴스 변수 사용 가능
System.out.prinln(cv); // 클래스 변수 사용 가능
}
// static 메서드 호출(객체 생성 없이 호출 가능)
static void staticMethod() {
System.out.println(iv); // ERROR, 인스턴스 변수 사용 불가(인스턴스 변수는 객체 생성 후 사용 가능)
System.out.println(cv); // 클래스 변수 사용 가능
}
}
3. static 멤버와 인스턴스 멤버
위치 | 종류 | 설명 | |
클래스 영역 | 인스턴스 멤버 (im) |
인스턴스 변수 | - 인스턴스 생성 시 생성 - 인스턴스 생성 후 사용 가능 - 인스턴스의 고유한 속성 |
인스턴스 메서드 | - 인스턴스 변수와 관련있는 작업을 하는 메서드 - 메서드 내 인스턴스 변수 사용 가능(인스턴스 생성 후 사용) - '참조변수명.메서드명()' 으로 호출 |
||
static 멤버 (=클래스 멤버) |
static 멤버 변수 | - 인스턴스 변수에 static이 붙은 것 - 클래스가 메모리에 올라갈 때 생성 - 언제든 사용 가능(인스턴스 생성할 필요X) - 인스턴스의 공통적 속성 |
|
static 멤버 메서드 | - 인스턴스 변수와 관련없는 작업을 하는 메서드 - 메서드 내 인스턴스 변수 사용 불가(stiatc 변수, 지역 변수 사용) - 언제든 사용 가능(인스턴스 생성할 필요X) - '클래스명.메서드명()' 으로 호출 |
||
메서드 영역 | 지역변수 | - 변수 선언문 수행 시 생성 - 선언된 메서드 내에서 만 사용 가능 - 메서드 종료 시 자동 제거 |
class Ex6_1 {
public static void main(String args[]) {
Tv t; // Tv인스턴스 선언, 참조변수명 t
t = new Tv(); // Tv인스턴스 생성
// Tv t = new Tv(); // 위 두 줄을 한줄로 표현(선언과 생성)
t.channel = 7; // Tv인스턴스의 channel을 7로
t.channelDown(); // Tv인스턴스의 channelDown() 인스턴스 메서드 호출
System.out.println("Tv의 채널은 " + t.channel + " 입니다.");
// static 메서드 호출
System.out.println("Tv의 사이즈는 " + Tv.size(100, 70) + " 입니다.");
}
}
// Tv 클래스(Tv설계도), 이 클래스로 만들어진 객체(Object)가 Tv
class Tv {
// Tv의 속성(변수)
// 인스턴스 변수(고유한 속성)
String color; // 색상
boolean power; // 전원(on/off)
int channel; // 채널
// static 변수(공통적인 속성)
static int weight = 15;
// Tv의 기능(메서드)
// 인스턴스 메서드
void power() {
power = !power;
}
void channelUp() {
++channel;
}
void channelDown() {
--channel;
}
// static 메서드
static int size(int width, int height) {
return width * height;
}
}
'Java' 카테고리의 다른 글
Java 생성자(constructor) (0) | 2022.10.09 |
---|---|
Java 메서드 오버로딩(method overloading) (0) | 2022.10.09 |
Java 기본형 매개변수, 참조형 매개변수 (0) | 2022.10.04 |
Java 호출 스택(call stack) (0) | 2022.10.04 |
Java return문, 반환값 (0) | 2022.10.03 |