필드(field)
필드
- 클래스에 포함된 변수로 객체의 속성값을 지정할 수 있다.
- 힙 메모리의 객체 내부에 생성되며, 객체가 사라지지 않는 한 절대로 삭제되지 않는다.
- 직접 초기화를 하지 않아도 강제 초기화가 된다. 초기화 값은 기본 자료형은 각 자료형에 맞게 초기화되며, 참조 자료형은 null로 초기화된다. (힙 메모리 특징)
지역 변수
- 메서드 내에 포함된 변수
- 스택 메모리에 생성되며, 메서드가 종료되면 자바 가상 머신이 자동으로 프레임을 삭제한다.
- 1개의 메서드 안에 선언된 모든 지역 변수들의 집합을 '프레임(frame)'이라 한다.
- 직접 초기화를 하지 않으면 빈 공간으로 남아 있으며 출력을 시도할 경우 예외를 발생한다. (스택 메모리 특징)
// 필드와 지역 변수
class MyClass {
int num; // 필드, num = 0;
double dNum; // 필드, dNum = 0.0;
...
public void myMethod() {
int num; // 지역 변수, num = [] 빈 공간
double dNum; // 지역 변수 dNum = [] 빈 공간
...
}
}
메서드
- 메서드는 "특정 작업을 수행하는 일련의 명령문들의 집합"을 의미하며, 클래스의 기능에 해당하는 요소다.
- 사람이라는 클래스로 예를 들면 먹기, 자기, 일하기 등이 메서드로 구성된다.
메서드 생성
- 접근 지정자 : 접근할 수 있는 범위를 지정하는 역할
- 리턴 타입 : 메서드 종료 이후 반환되는 값의 자료형
void를 제외한 모든 리턴 타입은 return 키워드와 함께 반환할 값이 반드시 있어야 함. - 메서드명 : 변수명과 선정 규칙 동일 -> 카멜 표기법
- 입력매개변수 : 메서드가 호출될 때 전달받을 값의 자료형과 저장할 지역 변수명
- 메서드 내용 : 메서드가 호출될 때 수행할 내용 작성
접근 지정자 리턴 타입 메서드명(입력매개변수1, 입력매개변수2, ...) { // 메서드 시그니처
메서드 내용 // 메서드 바디
}
public void sleep(String place) {
System.out.println(place + "에서 잠을 잡니다.");
}
public int add(int num1, int num2) {
int result = num1 + num2;
return result;
}
메서드 호출
외부에서 메서드 호출
- 메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해 반드시 인스턴스를 생성해야 한다.
- 인스턴스 생성 후 포인트 연산자(.)를 통해 메서드를 호출할 수 있다.
- 메서드 앞에 static 키워드가 붙은 메서드는 정적 메서드라 하며, 객체를 생성하지 않고 바로 호출 가능한 키워드이다.
public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
System.out.println(myClass.printHelloMsg1()); // 출력 : Hello!
myClass.printHelloMsg(); // 출력 : 안녕하세요.
MyClass.staticMethod(); // 출력 : 객체 생성 잆이 호출 가능
}
}
class MyClass {
public String printHelloMsg1() {
return "Hello!";
}
public void printHelloMsg2() {
System.out.println("안녕하세요.");
}
public static void staticMethod() {
System.out.println("객체 생성 없이 호출 가능");
}
}
내부에서 메서드 호출
클래스 내부에 있는 메서드끼리는 같은 멤버이기 때문에 인스턴스를 생성하지 않고 호출할 수 있다.
public class Main {
public static void main(String[] args) {
int num1 = 30;
int num2 = 20;
int total = add(num1, num2);
System.out.println(total); // 출력 : 50
}
public static int add(int num1, int num2) {
return num1 + num2;
}
}
메서드 입력매개변수 기본 자료형과 참조 자료형
- 기본 자료형을 인자로 메서드를 호출하면 데이터를 복사한 값을 전달한다.
- 참조 자료형을 인자로 메서드를 호출하면 실제 데이터 값이 저장된 위치값을 전달한다.
- 따라서, 기본 자료형을 인자로 받은 메서드에서 데이터를 수정하여도 복사본이 수정되지만(원본 그대로), 참조 자료형을 인자로 받는 메서드에서 데이터 값을 수정할 경우 원본값이 수정된다.
public class Main {
public static void main(String[] args) {
int[] arr = new int[1];
int num = 0;
add(arr);
add(num);
System.out.println("메서드 호출 후 arr 0번째 값 : " + arr[0]);
System.out.println("메서드 호출 후 num 값 : " + num);
}
static void add(int[] arr) {
System.out.println("수정 전 arr 0번째 값 : " + arr[0]);
arr[0]++;
}
static void add(int num) {
System.out.println("수정 전 num 값 : " + num);
num ++;
}
}
'Langauge > Java-basic' 카테고리의 다른 글
[Java] 생성자 (0) | 2022.07.20 |
---|---|
[Java] 메서드 시그니처와 메서드 오버로딩 (0) | 2022.07.19 |
[Java] 클래스와 객체 (0) | 2022.07.13 |
[Java] 배열 (0) | 2022.07.11 |
[Java] 제어문 (조건문 / 반복문 / 제어키워드) (0) | 2022.07.08 |