⭕️ 변수의 종류
1) 멤버 변수
- 클래스 멤버로 선언되는 변수, 메서드 외부에 선언됨
① 클래스 변수
- 변수 선언 시 static 키워드가 선언된 메서드
- 프로그램 시작시 메모리에 개체 생성되어 프로그램 종료시까지 계속 남아있음
② 인스턴스 변수
- 클래스로 선언되었지만 static 선언되지 않은 변수
- 클래스 당 1개만 프로그램 시작 전에 생성됨
- 해당 인스턴스가 참조되고 있다면 계속 사용 가능
2) 지역 변수
- 메서드 안에 선언된 변수, 해당 메서드에서만 사용 가능
- 메서드 실행시 메모리에 생성되어 메서드 종료시 자동 삭제
- 메서드 내 어디서든 호출 가능. 단, 선언한 다음 사용함
출처: https://bsj10k2.tistory.com/23 [사는거 징그럽다...:티스토리]
함수란 (function)
- 하나의 기능을 수행하는 일련의 코드
- 구현된(정의된) 함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환됨
- 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있음
함수 정의하기
함수는 이름, 매개 변수, 반환 값, 함수 몸체(body)로 구성됨
int add(int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
함수 구현하기 예제
package ch01;
public class FunctionTest {
// 1. 매개변수가 있고 반환값이 있는경우
public static int addNum(int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
// 2. 반환값이 없는경우
public static void sayHello(String greeting) { //return 값 없을때 void
System.out.println(greeting);
}
// 3. 매개변수가 없 반환값이 있는경우
public static int calcSum() {
int sum = 0;
int i;
for(i = 0; i<=100; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
int n1 = 10;
int n2 = 20;
int total = addNum(n1, n2);
sayHello("안녕하세요");
int num = calcSum();
System.out.println(total);
System.out.println(num);
}
함수 호출과 스택 메모리
- 스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리
- 함수의 수행이 끝나면 자동으로 반환 되는 메모리
메서드 (method)
- 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
- 멤버 함수 (member function)이라고도 함
- 메서드를 구현함으로써 객체의 기능이 구현 됨
- 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는것이 좋음
- 예) getStudentName()
객체의 속성은 멤버 변수로, 객체의 기능은 메서드로 구현한다
학생 클래스를 정의 하고 이를 사용해 보자
- 학생 클래스의 속성을 멤버 변수로 선언하고 메서드를 구현한다
package ch02;
public class Student {
//멤버변수 생성
public int studentID;
public String studentName;
public String address;
// 메서드 생성
public void showStudentInfo() {
System.out.println(studentID + "," + studentName + "," + address);
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String name) {
studentName = name;
}
}
- 학생 클래스를 생성하여 생성된 객체(인스턴스)에 각각 다른 이름과 주소를 대입한다 - 실행부
package ch02;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student(); //인스턴스 생성
// 각각 다른이름으로 줄 수 있는 이유는 heap이라는 동적메모리에 할당 되기 때문이다.
//참조변수
studentLee.studentID = 12345;
studentLee.studentName = "이순신";
studentLee.address = "서울";
studentLee.showStudentInfo(); // 메서드실행
Student studentKim = new Student();
studentKim.studentID = 56789;
studentKim.setStudentName("김유신");
studentKim.address = "경주";
studentKim.showStudentInfo();
//heap 메모리 할당된 주소
System.out.println(studentLee);
System.out.println(studentKim);
}
}
--------------------------------------------------------------
12345,이순신,서울
56789,김유신,경주
ch02.Student@1517365b
ch02.Student@4fccd51b
인스턴스 생성과 힙 메모리 (heap memory)
인스턴스 (instance)
- 클래스는 객체의 속성을 정의 하고, 기능을 구현하여 만들어 놓은 코드 상태
- 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨
- 가령, 학생의 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년등의 값을 가지게 됨
- new 키워드를 사용하여 인스턴스 생성
- ex ) 클래스명 참조변수명 = new 클래스명();
힙 메모리
- 생성된 인스턴스는 동적 메모리(heap memory) 에 할당됨
- C나 C++ 언어에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야 함 ( free() 난 delete 이용)
- 자바에서 Gabage Collector 가 주기 적으로 사용하지 않늠 메모리를 수거
- 하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 됨
참조 변수, 참조 값
Student studentLee = new Student();
studentLee.studentName = "홍길동";
System.out.println(studentLee);
용어 정리
객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수 : 클래스의 속성, 특성
메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 : 생성된 인스턴스의 메모리 주소 값
'|Backend.DevLog > JAVA' 카테고리의 다른 글
14. Java - 참조자료형 변수 (0) | 2022.06.29 |
---|---|
13. Java - 생성자(constructor), 오버로딩 (0) | 2022.06.29 |
11. Java 객체지향 프로그램 (0) | 2022.06.29 |
10. Java 반복문 - 중첩 반복문, break, continue (0) | 2022.06.29 |
09. Java 반복문 - while, for 문 (0) | 2022.06.28 |
댓글