1. 함수(Function) 란?
1) 개념
하나의 기능을 수행하는 일련의 코드이다.
호출하여 사용 및 함수가 실행된 후 값을 반환할 수 있다. 함수가 선언되면 여러 곳에서 호출되어 사용될 수 있다.
위 내용들을 통해 코드의 재사용성, 가독성을 높일 수 있다.
2) 함수의 구성 요소
함수는 머리(header)와 몸체(body) 부분으로 구성되어있다.
머리: 이름, 매개변수를 작성한다.
몸체 : 함수 동작 과정, 반환 값을 작성한다.
public class FunctionTest {
public static int add(int number1, int number2){ //이름, 매개변수 선언
int result = number1 + number2; //동작
return result; //반환
}
}
3) 함수 호출
위에서 생성한 add함수를 호출하기 위해 메인 함수에서 매개변수가 2개이기 때문에 add함수에 10,5라는 값을 넣어 함수를 호출하고 호출된 값을 result 변수에 저장하여 출력한다.
public class FunctionTest {
public static int add(int number1, int number2){ //이름, 매개변수 선언
int result = number1 + number2; //동작
return result; //반환
}
public static void main(String[] args) {
int result = add(10,5);
System.out.println("더하기 값은: " + result + "입니다.");
}
}
2. 메서드(Method) 란?
1) 개념
객체의 기능을 구현하기 위해서 클래스 내부에 구현되는 함수이다.
메서드의 이름 설정은 클라이언트 코드에 맞게 설정하는 것이 바람직하다.
암묵적 명명 규칙
자바 이름 설정할 때 패키지는 소문자, 클래스는 첫 글자 대문자, 메서드는 소문자로 작성하는 것이 바람직하다.
2) 메서드 구성 요소
메서드도 함수와 동일하게 머리(header)와 몸체(body) 부분으로 구성되어있다.
머리: 이름, 매개변수를 작성한다.
몸체 : 함수 동작 과정, 반환 값을 작성한다.
public class Student {
public int studentID; //학번
public String studentName; //이름
public String address; //주소
public String getStudnentName() { //힉생이름 반환
return studentName;
}
public void showStudentInfo() { //학생 정보 출력
System.out.println("학번:" + studentID);
System.out.println("이름:" + studentName);
System.out.println("주소:" + address);
}
}
3) 메서드 호출
위에서 생성한 2개의 메서드를 호출하기 위해 객체를 생성하고 생성한 객체를 통해 메서드를 호출한다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student(); //객체 생성
//객체에 값 대입
studentPark.studentID = 1234;
studentPark.studentName = "피망";
studentPark.address = "서울시";
//메서드 호출
studentPark.showStudentInfo();
studentPark.getStudnentName();
}
}
3. 인스턴스(Instance) 란?
1) 개념
메서드는 호출이되기 위해서 클래스로부터 객체를 생성해야 하는데 생성된 객체를 인스턴스라고 부른다.
(Stack 영역과, Heap 영역에 대해 안다는 가정 하에 작성하였다.)
studentPark 변수는 Stack 영역에 저장되고 studentPark에 대한 정보는 Heap영역에 저장된다.
객체를 생성할 때 new라는 키워드를 사용하여 생성하는데 이때 Heap 영역에 메모리가 할당된다.
Student studentPark = new Student();
이러한 studentPark을 하나의 인스턴스라고 부르고 각각의 인스턴스는 별개의 메모리 공간을 갖게 된다.
C, C++과 다르게 Java의 경우 Gurbage Collector가 존재하여 Heap 영역을 사용하지 않을 경우 자동으로 동적 할당을 해제한다.
2) 출력 결과
이전에 생성하여 stack 영역에 저장된 참조 변수인 studentPark과 studentKim을 출력해보면 다음과 같다.
Student studentPark = new Student(); //Park 객체 생성
System.out.println(studentPark); //참조 변수 출력
패키지명.클래스명@주소 값
classpart.Student@28a418fc
해당 주소 값을 통해 Heap 영역에 있는 학번, 이름, 주소 값들을 참조한다.
4. 함수와 메서드의 차이점
함수는 호출이 되면 Stack 메모리에 저장되며 함수의 동작이 끝나면 메모리에서 사라진다.
메서드는 위에서 생성한 객체의 기능을 구현하기 위해서 클래스 내부에 구현되는 함수이다.
//메서드 사용 예시
Student studentPark = new Student(); //Park 객체 생성
//Park 객체에 값 대입
studentPark.studentID = 1234;
studentPark.studentName = "피망";
studentPark.address = "서울시";
//Park 객체에 대한 메서드 출력
studentPark.showStudentInfo();
5. O,X QUIZ
Question 1: 객체를 생성한 후 객체의 멤버 변수 정보를 출력할 경우 함수로 구현한다.
Question 2: 인스턴스의 정보는 Heap 영역에 저장된다.
Question 3: 함수와 메서드는 다른 개념이다.
정답 보기
Question 1: X
객체의 기능을 구현하기 위해서 클래스 내부에 구현되는 함수는 메서드이다.
Question 2: O
인스턴스의 데이터는 Heap영역에 저장되고 Stack 영역에서 해당 주소 값을 참조한다.
Question 3: X
메서드도 함수와 구현방식이 같지만 객체의 기능을 구현하기 위해 클래스 내부에 생성한다.
(메서드는 함수의 하위개념이다.)
'Language > JAVA' 카테고리의 다른 글
[JAVA]접근 제어자(Access modifier) 개념 및 구현 (0) | 2021.02.14 |
---|---|
[JAVA] 참조 자료형(Reference data type) 개념 및 구현 (0) | 2021.02.14 |
[JAVA]생성자(Constructor), 생성자 오버로딩(Overloading) 개념 및 구현 (0) | 2021.02.14 |
[JAVA] 클래스와 객체를 이용한 간단한 예제 풀이 (0) | 2021.02.13 |
[JAVA] 객체(Object), 클래스(Class) 개념 및 구현 (0) | 2021.02.13 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊