ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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);
    }

    }

    반응형

    댓글

Designed by Tistory.