-
[JAVA] 객체지향 프로그래밍(3)프로그래밍/JAVA 2015. 7. 28. 01:30반응형
메서드 : 어떤 작업을 수행하기 위한 명령문의 집합
- 주로 어떤 값을 입력받아 처리하고 그 결과를 되돌려준다.
- 경우에 따라 입력, 결과값이 없거나 반환하지 않을수도있다.
- 사용하는 가장 큰이유는 반복적으로 사용되는 코드를 줄이기 위함 : 코드를 메서드로 작성후 필요한곳에서 호출
- 메서드 사용시 유지보수가 편함.
메서드 사용시 유의점
- 하나의 메서드는 한가지 기능만 수행하도록 작성하는것이 좋다.
- 반복적으로 수행되어야하는 여러 문장을 하나의 메서드로 정의해두면 좋다.
- 관련된 여러 문장을 하나의 메서드로 만들어 놓는 것이 좋다.
return문
- 메서드가 정상적으로 종료되는 경우는 두가지이다.
- 메서드의 블럭{}내의 마지막 문장까지 수행했을 때
- 메서드의 블럭{}내에 있는 문장을 수행 중 return문을 만났을 때
- 반환값이 없는경우 return문만 쓰면되며 있는 경우 return문 뒤에 반환값을 지정해주어야한다.
메서드의 호출
JVM의 메모리 구조
- 응용프로그램이 실행되면 JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리
1. 메서드 영역 (Method Area) : 프로그램 실행 중 어떤 클래스가 사용되면 JVM은 해당 클래스의 클래스 파일을 읽어서 분석하여 클래스에 대한 정보를 이곳에 저장, 이 떄 그 클래스의 클래스 변수도 이 영역에 함께 생성
2. 힙 (Heap) : 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에서 생성, 즉 인스턴스 변수들이 생성되는 공간
3. 호출 스택(Call Stack 또는 Execution Stack) : 메서드의 작업에 필요한 메모리 공간을 제공
- 메서드가 호출되면 호출 스택에 호출된 메서드를 위한 메모리가 할당되며 이 메모리는 메서드가 작업을 수행하는 동안 지역변수들과 연산의 중간 결과등을 저장하는데 사용
- 메서드가 작업을 마치면 할당되었던 메모리공간은 비워진다.
오늘의 코드
package jul27;
public class ReturnTest {
public static void main(String[] args) {
ReturnTest r = new ReturnTest();
int result = r.add(3, 5);
System.out.println(result);
int[] result2 = { 0 }; // 배열을 생성하고 result2[0]의 값을 0으로 초기화
r.add(3, 5, result2); // 배열을 add메서드의 매개변수로 전달
System.out.println(result2[0]);
}
int add(int a, int b) {
return a + b;
}
void add(int a, int b, int[] result) {
result[0] = a + b; // 매개변수로 넘겨받은 배열에 연산결과를 저장
}
}
package jul27;
public class MyMathTest {
public static void main(String[] args) {
MyMath mm = new MyMath();
long result1 = mm.add(5L, 3L);
long result2 = mm.substract(5L, 3L);
long result3 = mm.multiply(5L, 3L);
double result4 = mm.devide(5L, 3L);
System.out.println("add(5L,3L) =" + result1);
System.out.println("substract(5L,3L) = " + result2);
System.out.println("multiply(5L,3L) =" + result3);
System.out.println("devide(5L,3L) =" + result4);
}
}
class MyMath {
long add(long a, long b) {
long result = a + b;
return result = a + b;
// return a+b; //위의 두줄을 이와 같이 한줄로 표현 가능
}
long substract(long a, long b) {
return a - b;
}
long multiply(long a, long b) {
return a * b;
}
double devide(long a, long b) {
return a / b;
}
}
package jul27;public class CallStackTest {public static void main(String[] args) {firstMethod();}static void firstMethod() {secondMethod();}static void secondMethod() {System.out.println("SecondMethod() ");}}package jul27;public class CallStackTest2 {public static void main(String[] args) {System.out.println("main(String[] args)이 시작되었음.");firstMethod();System.out.println("main(String[] args)이 끝났음.");}static void firstMethod() {System.out.println("firstMethod()이 시작되었음");secondMethod();System.out.println("fisrtMethod()이 끝났음");}static void secondMethod() {System.out.println("secondMethod()이 시작되었음");System.out.println("secondMethod()이 끝났음");}}package jul27;class Data {int x;}public class ParameterTest {public static void main(String[] args) {Data d = new Data();d.x = 10;System.out.println("main() : x = " + d.x);change(d.x);System.out.println("After change(d.x) = " + d.x);}static void change(int x) {// 기본형 매개변수x = 1000;System.out.println("chagne() : x = " + x);}}package jul27;public class ParameterTest2 {public static void main(String[] args) {Data d = new Data();d.x = 10;System.out.println("main() : x = " + d.x);change(d);System.out.println("after change(d)");System.out.println("main() : x = " + d.x);}static void change(Data d) { // 참조형 매개변수d.x = 1000;System.out.println("change() : x = " + d.x);}}반응형'프로그래밍 > JAVA' 카테고리의 다른 글
[JSP] 표현 언어(Expression Language) (0) 2015.07.29 [JSP] 웹어플리케이션의 일반적인 구성 및 방명록 구현 (0) 2015.07.28 [JSP] JSP 기본 (1) (0) 2015.07.13 [JAVA] IO Stream (1) (0) 2015.07.08 [JAVA] 객체지향 프로그래밍 (2) (0) 2015.07.08