ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CHAPTER 6. (4) return문이란? (호출 스택, Call by Value, Call by Reference 등 포함) ★★
    java/ㄴ CHAPTER 6. 객체지향 프로그래밍 1 2020. 3. 23. 19:11

    return문
     - 현재 실행중인 메서드 종료, 호출한 메서드로 복귀
     - 모든 메서드는 적어도 하나의 return문 필요


    void는 필요 없던데?
     - 지금까지 컴파일러가 메서드 마지막에 return; 을 자동 추가했었음



    호출스택
     - 메서드의 작업에 필요한 메모리 공간 제공

    호출된 메서드를 위한 메모리가 할당됨
     (메모리는 지역변수, 연산의 중간 결과 등을 저장하는데 사용됨)
     = 메서드가 작업을 마치면 할당되었던 메모리 공간 반환됨



    ★★ 기본형 매개변수 Call by Value
      - 메서드의 매개변수에 기본 자료형 값을 전달해서 메서드를 실행 // 메서드엔 값의 복사본이 전달됨
     = 원본에 아무런 영향이 없음

    -> 기본형 매개변수는 변수에 저장된 값을 읽을 수만 있음 (변경 불가)
     = 호출된 메서드에서 전달받은 값을 변경해도 원본의 값은 변하지 않음

     


    ★★ 참조형 매개변수 Call by Reference
     - 메서드의 매개변수에 객체의 참조값(주소값)을 전달해서 메서드를 실행
     // 호출된 메서드에서 전달받은 주소값에 참조되는 객체의 속성을 변경하는 것은
    원본 객체의 속성을 변경하는 것과 동일
      = 즉,  원본의 값이 변경됨



    클래스 메서드(static 메서드)
     - 객체 생성하지 않고 호출 가능 (클래스 변수와 같음)

    인스턴스 메서드
     - 인스턴스 생성해야만 호출 가능
     ㄴ 왜? : 인스턴스 메서드는 인스턴스 변수와 관련된 작업 - 인스턴스 변수를 필요로 하는 메서드
     : 인스턴스 변수는 인스턴스를  생성해야만 만들어짐
     => 인스턴스 메서드는 인스턴스를 생성해야만 호출 가능



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    package oop2; 
     
    public class MyMethod { 
     
    // 인스턴스 변수 (멤버 변수) 
    String name; 
     
    // 클래스 변수 (static정적 변수) 
    // 정적 변수 대부분은 상수 
    static final double PI = 3.14
     
    // 인스턴스 메서드 
    // 인스턴스 변수, 클래스 변수 모두 사용 가능 
    void memberMethod() { 
    System.out.println("인스턴스 변수 사용 : " + name); 
    System.out.println("클래스 변수 사용 : " + MyMethod.PI); 
     
    // 인스턴스 메서드 
    // 인스턴스 메서드, 클래스 메서드 모두 사용 가능 
    void memberMethod2() { 
    memberMethod(); 
    MyMethod.staticMethod(); 
     
    // 클래스 메서드 (정적 메서드) 
    // 클래스 변수만 사용 가능 (인스턴스 변수 사용 불가) 
    static void staticMethod() { 
    // System.out.println("인스턴스 변수 사용 : " + name); 오류 
    System.out.println("클래스 변수 사용 : " + MyMethod.PI); 
     
    // 클래스 메서드 (정적 메서드) 
    // 클래스 메서드 사용 가능 (인스턴스 메서드 사용 불가) 
    static void staticMethod2() { 
    // memberMethod(); 
    MyMethod.staticMethod(); 
     
     
     

     



    static 붙이는 상황
     - 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것
     - 클래스 변수는 인스턴스 생성하지 않아도 사용 가능
     - 클래스 메서드는 인스턴스 변수 사용 불가
      ㄴ 왜? : 클래스 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있기 때문
      ㄴ 반대는? : 가능, 인스턴스 변수가 존재한다==static변수가 이미 메모리에 올라와서 존재한다는 의미

     - 메서드 내에서 인스턴스 변수 사용하지 않으면 static 변수 사용 고려
     (호출시간 짧아짐, 성능 향상)

     -> 클래스 멤버변수 중 모든 인스턴스에 공통된 값 유지해야 하는 것이 있을 때 static
     -> 작성한 메서드 중 인스턴스 멤버(변수, 메서드) 사용하지 않는 메서드에 static 

Designed by Tistory.