java – Class 메서드(Method)
java 에서는 모든 매개변수 전달을 할때 값 복사(Call by value)를 합니다. C언어의 경우 Call by value와 Call by Reference가 모두 있었는데, java는 주소 복사(Call by reference)를 하지 않는 다는 것입니다.
1. 메서드의 정의, 호출 (Definition, Call)
1) 메서드 정의
int sumW(int x, int y){ int c; c = x + y; return c; } |
2) 메서드의 호출 (Call)
int a = 3; int b = 4; int c = sumW(a,b);
※ sumW(a, b) 함수를 호출할때, 메서드 안에 있는 불러온 매개변수 x=a, y=b 로 넘어올떄!! 이떄 값 복사를 합니다. 그리고 c=sumW(a,b)에서 sumW의 리턴값을 c에 복사 할때도 값 복사를 한다는 것입니다. |
2. 참조 변수 (Reference variable)
java는 C의 “포인터(pointer)" 대신에 JAVA의 "참조변수"라는 것을 사용합니다.
(무슨 소리인지.. 뒤에서 한번 봐야겟네요.)
3. 클래스 (Class)
1) 메서드와 변수가 같이 있는 클래스
SeparatedData.java public class SeparatedData { public int x; public int y; public int plus(int x, int y) { // 멤버 메서드 return x + y; } public int minus(int x, int y){ // 멤버 메서드 return x - y; } } |
2) 메서드만 있는 클래스
SeparatedDataMain.java public class SeparatedDataMain { public static void main(String[] args){ SeparatedData d = new SeparatedData(); //SeparatedData 객체 생성 d.x=5; d.y=10; System.out.println(d.minus(5,10)); //minus() 메서드 호출 후 결과 출력 d.minus(); System.out.println(d.plus(5,10)); //plus() 메서드 호출 후 결과 출력 d.plus(); } } |
위 예제 코드를 보면, main 함수에서 SeparatedData 클래스 변수를 생성한 후, 클래스내에 있는 메소드를 이용해서 덧셈, 뺄셈을 하고 있습니다. 파란색을 제외시키면 메서드만 있는 클래스를 사용하고 있고, 파란색을 포함하면 변수를 사용하고 있다. 변수가 클래스 안에 있으니깐 매개변수로 값을 넘겨줄 필요가 없어졌네요. 앗, 무슨 말이지? 그렇다면 클래스(Class)를 정의해보죠.
클래스 = 변수들 + 함수들
Class = Values + Methods
※ java 상태 유지 클래스(Class)에서 멤버 변수 x, y의 값이 한번 설정되면, 이 멤버를 사용하는 메서드에 영향을 미치기 때문에 객체의 상태를 유지하면서(셋팅된 값으로 유지하면서) 지속적으로 메서드를 호출할 수 있습니다. 객체의 상태 유지라고 해서 특별한 것은 없습니다. 객체의 메모리에 값을 한번 셋팅한 후 계속해서 셋팅된 값을 이용해서 멤버 메서드를 호출할 수 있다는 측면에서 상태유지라는 단어를 사용한 것입니다. |
C 언어에서는 구조체(Struct) 변수안에 변수들이랑 바깥에 함수들을 만들어서 둘이 섞어서 사용해야 했는데. 이렇게 묶어지니깐 훨씬 편하게 사용할 수 있을 것이라 생각되네요. 상태유지하면서 그냥 그 값으로 함수를 불러내서 사용도 할 수 있구요.
4. Main 클래스
java를 공부하면서 알게 된 사실은 main이 클래스 내부에 있는 것입니다. C 에서는 따로 떨어져 있는데, 이게 큰 차이점 중 하나였습니다.. 그래서 왜 main이 클래스 내부에 있는 것인지 알아봤습니다.
C나 C++에서는 main은 독립된 함수로 존재해야 되지만, java에서는 무조건!! 무조건 main함수도 클래스 안에 있어야 합니다. java에서는 C처럼 클래스 외부에 변수나, 메서드가 완전히 없는 언어라고 합니다. 그럼, 여기서 main도 메서드인가라는 생각이 잠깐 드는데, 당연히 main도 하나의 메서드입니다.
사실, 이전에 C++ 살짝 공부해봤는데, 이번에 java는 완전히 클래스화되어 있다는 것을 느끼게 되네요.