본문 바로가기
IT 돌고래/JAVA

[JAVA]자바의 열두걸음 : 메소드(함수) 응용

by IT돌고래 2020. 3. 3.
반응형

안녕하세요.

IT 돌고래입니다.

자바의 메소드(함수) 응용에 대해서 이야기를 해보겠습니다.

 

메소드(함수)의 기본적인 내용은 자바의 열한 걸음에서 설명을 드렸습니다. 열두 걸음은 메소드(함수)에 대해서 확장해서 설명을 드리겠습니다. 또한 메소드(함수)에서 어렵게 느끼는 것을 설명드리겠습니다.

 

1. 인자의 개념의 확장

void test1(int a, int b, int c, String str, ...)
//인자는 원하는 만큼 만들어서 사용을 할 수 있습니다.

class A
//클래스 A
{
     void tell()
     // 형식 4번째인 tell 함수
     {
         System.out.println("안녕하세요"); // 출력
     }
}

public class test
//클래스 test
{
    public static void test2(A a)
    //형식 3번째인 test2함수이며 static 함수이기 때문에 메모리에 바로 올라감
    {
         a.tell();// A객체인 a를 이용해 tell 함수 호출
    }
    public static void main(String[] args) {
    //메인함수
           A a = new A(); // A객체를 생성해서 A의 a에 대입
           test2(a); // static 함수인 test2 함수를 A객체 a를 인자에 대입 해서 호출
    }
}

// 결과값 : 안녕하세요

함수의 인자 값을 받아서 함수의 안에서 연산 작업을 하게 됩니다. 인자를 받는 방식이 2개가 있습니다.

//1. Call by Value
void test01(int a, char ch, double d)
// 기본 자료형을 인자로 받는다.

class B
{

}
//2. Call by reference
void test02(int[] array, B b)
// 배열 객체 또는 클래스 객체를 인자로 받는다.

 

ㄱ. Call by Value

Call by Value는 인자로 전달될 때 int a, char ch, double d 이변수들에게 값이 전달 되서 함수가 수행이 되게 됩니다. Call by Value인 경우에는 함수가 종료되고 함수를 호출한 곳으로 이동하면 인자변수인 int a, char ch, double d는 모두 클리어되고 없어집니다.

 

ㄴ. Call by reference

Call by reference의 경우에는 인자가 전달 될때 int [] array, B b 이 변수들로 객체를 전달받게 됩니다. 함수를 호출 한 곳에서 객체를 만들어서 인자로 전달되기 때문에 데이터의 연산이나 가공을 거치면 함수를 호출을 한 곳에 객체의 값이 바뀌고 함수가 종료 후에 다시 호출한 곳으로 돌아가도 객체의 값들은 여전히 남아 있습니다.

 

※ 함수에서 인자들은 호출 한 곳에서 온 객체를 조정할 수 있는 핸들이 됩니다. 또한 함수 종료 시 핸들은 없어집니다.

 

2. 리턴 개념의 확장

//1. 여러가 값을 보낼 때

int [] test01()
{
}

String[] test02()
{
}

//2. 자료형이 다른 값을 보낼 때

class B
{
    int a;
    String str;
}

class A
{
    B test03()
    {
    
    }
}

//3. 자료형이 다른 값을 여러가 보낼 때
class C
{
     B[] test04()
     {
     
     }
}

위에 소스를 보면 알 수 있듯이 결괏값을 정수 값 하나이거나 아니면 문자열 하나만 값을 보낼 수 있는 것이 아니라 여러 가지 똑같은 값이나 아니면 다른 종류의 값을 담아서 보내고 또한 다른 종류의 값을 여러 개를 담아서 보낼 수가 있다. 

하나만 리턴을 하지만 결국 어떻게 쓰냐에 따라 여러 개의 값을 보낼 수가 있습니다.

 

※ 위에 인자의 개념을 확장해서 사용하고 리턴의 개념을 확장함으로써 함수를 더욱더 잘 활용을 할 수가 있습니다.

 

※ 긴 글을 읽어 주셔서 감사합니다. Java를 계속 진행해 나가겠습니다.

 

★ 이글 이후에는 Java 클래스에 대한 내용을 정리해서 처음부터 정리를 할 예정입니다. 많은 관심 부탁드립니다

 

 

반응형

댓글