기억보다 기록을

[JAVA] 메소드 호출과 프로그램의 기능적 분할-call by reference, call by value, actual prameter, formal parameter 본문

Language/JAVA

[JAVA] 메소드 호출과 프로그램의 기능적 분할-call by reference, call by value, actual prameter, formal parameter

juyeong 2022. 6. 6. 15:20
반응형
권오흠 교수님의 자료구조 강의를 듣고 정리했습니다. 

 

🔺What I learn from this lecture 

  • 코드를 작성할 때 어떻게 함수를 호출하고 매개변수를 전달할지를 생각하자
  • 어떻게 전체 프로그램이 할 일을 작고 명료하게 기능적으로 분할하여 구조화할 수 있을지 고민하자 
  • 구조화된, structured program의 핵심은 함수를 잘게 쪼개는 것이다. 
  • 기능적 분할이 어떻게 이뤄지는지 학습하는 것이 재미있었다. 
  • 이는 결국 call by value, call by reference에 대한 이야기로 연결된다 and it also connected to actual parameter, formal parameter
  • return 의 역할은 2개, 함수의 종료와 값의 반환이다. 
  • 프로그래밍, 알고리즘을 짤 때 교묘한 방법을 찾으려 하지 말고 무식하지만 논리적으로 명료한 방법을 찾자. 

 

🔺Look how the method seperated and works together

import java.util.Scanner;

//입력으로 두 정수 a,b를 입력받아 a의 b승을 계산한다. 
class code16 {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("please enter two integers and press Enter");

        int a = keyboard.nextInt();
        int b = keyboard.nextInt();

        int result = power(a, b);
        System.out.println("The result is" + result);
        keyboard.close();

    }

    public static int power(int n, int m) {
        int result = 1;
        for (int i = 0; i < m; i++) {
            result *= n;
            return result;
        }
    }
}
package dataStructure;

//1-100,000사이의 소수를 찾아 출력한다
public class code17 {
    public static void main(String[] args) {
        for (int i=2;i<=100000; i++) {
            if (isPrime(i)) {
                if(isPrime(i))
                System.out.println(i);
            }
        }
        
        public static boolean isPrime(int k) {
            if (k<2)
                return false;
            for(int i=2;i*i<=k;i++) {
            if(k%i==0)
                return false;
        }
            return true;
    }
    }

}
package dataStructure;

import java.util.Scanner;

//입력받은 값의 버블정렬 구현
public class code18 {

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[] data = new int[n];
        for (int i = 0; i < n; i++)
            data[i] = kb.nextInt();
        kb.close();
    }

    bubbleSort(n, data);

    System.out.println("Sorted data:");
    for( int i=0;i<n;i++) 
        System.out.println(data[i]);
}

    static void bubbleSort(int n, int[] data) {
        for (int i = n - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (data[j] > data[j + 1]) {
                    int tmp = data[j];
                    data[j] = data[j + 1];
                    data[j + 1] = tmp;
                }
            }
        }
    }
}
package dataStructure;

import java.io.FileNotFoundException;
import java.util.Scanner;

//텍스트 파일을 입력받아 그 안의 값을 출력하는 프로그램
public class code19 {

    public static void main(String[] args) {
        String[] name = new String[1000];
        String[] number = new String[1000];
        int n = 0;

        try {
            Scanner inFile = new Scanner(new File("input.txt"));

            while (inFile.hasNext()) {
                name[n] = inFile.next();
                number[n] = inFile.next();
                n++;
            }
            inFile.close();
        } catch (FileNotFoundException e) {
            System.out.println("NO file");
            System.exit(9);
        }
        for (int i = 0; i < n; i++)
            System.out.println(name[i] + ":" + number[i]);
    }

}

🔺Actual parameter, Formal parameter / Call by value, Call by reference

  • primitive 타입의 매개변수는 호출된 매개변수에서 값을 변경하더라도 호출한 쪽에 영향을 주지 못한다. call by value이기 때문이다. 
  • reference 타입의 매개변수는 호출된 메서드에서 변경하면 호출한 쪽에서도 변경된다. 
  • 값에 의한 호출: c,java에서 똑같다. actual paramter, formal parameter를 완전 별개의 변수로 생각하는 것이다. 처음 한번 복사한 뒤 그 이후로는 서로 연동되지 않는다. 복사한 값들을 swap하는 것이므로 원본에는 아무 영향을 주지 않는다. 

  • call by reference는 c,java에서 지원하지 않는다. c++에서는 또다른 매개변수 방법인 참조에 대한 호출을 지원한다. 참조에 의한 호출에서는 actual paramter, formal parameter를 별개의 변수로 생각하지 않는다. 하나인 변수를 이름만 달리한 것으로 생각하며 접근한다. 
반응형