자바 class, 함수, method, - Do it 자바프로그래밍기초
순서대로 일어나는 일을 시간순으로 프로그래밍하는 것을 절차 지향 프로그래밍이라고 한다.
반면에 객체 지향 프로그래밍이란 객체를 정의하고 객체 간 협력을 프로그래밍하는 것이다.
객체 지향 프로그램은 클래스를 기반으로 프로그래밍하는데, 클래스는 객체의 속성과 기능을 코드로 구현한 것이다.
클래스의 속성을 '멤버 변수'라고 하는데, 예를 들어 Student 객체가 가지는 속성(멤버 변수)는 학번, 이름, 학년, 사는 곳 등이 있을 것이다.
public class Student {
int studentID;
String studentName;
int grade;
String address;
}
클래스를 만들 떄는 class 예약어를 사용하고 클래스 이름은 Student로 정했다. { } 안에는 클래스 내용을 구현하는데, 학생이라는 객체의 속성(멤버 변수)를 선언한다. 변수 속성에 맞는 자료형으 사용해야 하며, 자바 프로그램은 모든 요소가 클래스 내부에 있어야 한다. 외부에는 package 선언과 import 문자 외에 아무것도 선언하지 않는다.
위 예시 코드에서는 studentID, studentName, grade, address 가 멤버 변수이다.
위와 같이 멤버 변수를 선언할 때 int, double 같은 기본 자료형으로 선언할 수도 있고, 또 다른 클래스형으로 선언할 수도 있다.
클래스형이란 다른 말로 객체 자료형 또는 참조 자료형이라고 하며 String, Date와 같이 JDK에서 제공하는 것일 수도 있고,
개발자가 직접 만든 Student나 Person같은 클래스가 다른 클래스에서 멤버 변수의 자료형이 될 수도 있다.
public class Student {
int studnetID;
String studentName;
int grade;
String address;
public void showStudnetInfo { //메서드 추가
System.out.println(studentName + ", " + address); //이름,주소 출력
}
클래스 내부에서 멤버 변수를 사용하여 클래스 기능을 구현한 것을 '멤버 함수' 또는 '메서드'라고 한다.
위 코드를 보면 Student 클래스 안에 showStudentInfo() 메서드를 추가했다. 학생의 이름과 주소를 출력하는 기능을 한다.
메서드는 이름이 있고 입력값과 출력값을 갖는다.
int add(int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
위 코드에서 add는 함수이름, num1과 num2는 함수의 입력값으로 받는 매개변수, result가 돌려주는 반환값, int가 반환값의 자료형이 된다.
매개변수나 반환값이 없는 함수들도 있다. 위 코드들 중 showStudentInfo()가 매개변수가 없는 함수가 되고, 반환값도 없다. 결과값만 존재하는 것인데, 반환값이 없다면 반환값의 자료형으로 void를 써줘야한다.
return 예약어는 함수의 반환값을 정할 수도 있고,
return ;으로 끝낸다면 함수 수행을 끝내고 프로그램 흐름 중에서 호출한 곳으로 다시 되돌아갈 때도 사용할 수 있다.
void divide(int num1, int num2) {
if(num2 == 0) {
System.out.println("나누는 수는 0이 될 수 없다.");
return;
}
else {
int result = num1/num2;
System.out.println(num1 + "/" + num2 + "=" + result + "입니다.");
}
}
위의 divide 함수는 두 수를 매개변수로 전달받고 나눗셈을 한 후 몫을 출력하는 함수이다. 나누는 수가 0이 되면 안되기 때문에 if (num2 == 0)에서 return;을 사용해 함수를 종료하고, 함수 종료가 목적이기 때문에 return 뒤에 반환값을 적지 않아도 된다.
public class FunctionTest {
public static void main(String[ ] args) {
int num1 = 10;
int num2 = 20;
int sum = add(num1, num2);
System.out.println(num1 + " + " + num2 + " = " + sum + "입니다.");
}
public static int add(int n1, int n2) {
int result = n1 + n2;
return result;
}
}
위 add() 함수는 두개의 매개변수에 int형 값을 전달받아 두 수의 합을 돌려준다. 반환값이 정수이기 때문에 반환형을 int로 썻고, sum 변수 또한 add()함수의 반환값이 저장되는데 그 반환값이 정수이기 때문에 int라고 써줬다.
add()함수를 호출할 때에는 num1,num2, 두 개의 변수를 넘겼는데, 함수를 구현하는 부분에서는 n1, n2를 사용했다.
함수를 호출할 때 넘겨주는 변수 이름과 함수를 구현할 때 사용한 매개변수 이름이 같을 필요가 없고, 전혀 상관이 없다.