본문 바로가기

Java/예제로 공부하는 Java 100 문제풀이

[예제로 공부하는 Java 100 문제풀이 Part.3] 섹션0 - 함수

1. 메서드, 정의, 메서드 구현

 

1) 아래의 메서드 구현 코드에서 틀린 곳을 찾아 올바르게 수정하시오.

 

//문제
public class Java100_method_ExamStatic1 {
    public void helloWorld() {
        System.out.println("Hello, World~ ^_^");
    }
    
    public static void main(String[] args) {
        //[1]: 메서드 호출
        helloWorld();
    }
}

//풀이
public class Java100_method_ExamStatic1 {
    public static void helloWorld() {
        System.out.println("Hello, World~ ^_^");
    }
    
    public static void main(String[] args) {
        //[1]: 메서드 호출
        helloWorld();
    }
}

//main()가 static이니 추가한 함수도 static이어야 호출할 수 있음

 

2) 메서드의 정의와 기본적인 자바의 메서드를 작성해보시오.

 

//[1]: 메서드란 무엇인가?
//(1) 메서드는 다른 언어에서의 함수와 마찬가지로 어떤 특정한 동작이나 처리를 하도록 만들어진 코드 단위이다.
//(2) 반복적인 작업을 처리해야 하는 경우 메서드로 만들어 놓으면 이후에 필요할 때 다시 재사용할 수 있어서 아주 유용하다.
//(3) 메서드는 호출시 어떤 결과를 반환하기도 하지만, 결과를 반환하지 않는 메서드도 있다.
//(4) 메서드는 호출시 어떤 인자 값들을 넘겨서 호출하는 경우도 있지만, 인자 값 없이 호출하는 경우도 있다.

//[2]: 메서드 종류-->크게 4가지 유형
//(1) 반환값-->X	받는 인자값-->X
//(2) 반환값-->X	받는 인자값-->O
//(3) 반환값-->O	받는 인자값-->X
//(4) 반환값-->O	받는 인자값-->O

public class Java100_method_Exam001 {
    
    public static void showMenu() {
        System.out.println("showMenu() 메서드가 호출되었습니다.");
    }
    
    public static void main(String[] args) {
        
        //[1]: 반환값-->X	받는 인자값-->X
        showMenu();
    }
}

 

 

2. 반환값, 리턴, 인자값, 메서드, 덧셈

 

1) 반환값이 없고 받는 인자값이 2개 있는 덧셈 메서드를 구현하시오.

 

public class Java100_method_Exam002 {

    public static void plusMethod(int a, int b) {
       
       //단순 출력
        System.out.printf("인자로 넘겨받은 2개의 값은 %d와 %d입니다.%n", a, b);
        
        //연산 출력
        int rst = a + b;
        System.out.println("두 수를 더한 값은 = " + rst);
    }
    
    public static void main(String[] args) {
    
        //[1]: 반환값-->X	받는 인자값-->O
        //메서드가 받는 인자값이 있다는 것은 호출부에서 파라미터 값을 넘긴다는 뜻.
        int a = 100, b = 200;
        plusMethod(a, b);
    }
}

 

 

3. 반환값, 인자값, 메서드

 

1) 반환값이 있고 받는 인자값이 없는 메서드를 구현해보시오.

 

public class Java100_method_Exam003 {
    
    public static int returnMethod() {
        int ret = 100;
        ret *= 100;
        return ret; //10000
    }
    
    public static void main(String[] args) {
    
        //[1]: 반환값-->O	받는 인자값-->X
        //반환값이 있다는 것은 메서드(함수) 호출에 따른 리턴값이 있는 것이므로 호출시 리턴값을 받는 변수를 정의한다.
        int rst;
        rst = returnMethod();
        
        //[2]: 출력
        System.out.println("메서드 호출에 따른 리턴된 값은=" + rst); //10000
    }
}

 

 

4. 반환값, 인자값, 대문자, 메서드

 

1) 반환값이 있고 받는 인자값이 있는 대문자 출력 메서드를 구현해보시오.

 

public class Java100_method_Exam004 {

    public static String capitalMethod(String str) {
        
        //문자열 변수 선언
        String ret = str.toUpperCase();
        return ret;
    }

    public static void main(String[] args) {
    
        //[1]: 반환값-->O	받는 인자값-->O
        //반환값이 있다는 것은 메서드(함수) 호출에 따른 리턴되는 값이 있다는 것이므로 호출시 리턴값을 받는 변수를 정의한다.
        //문자열 변수 선언
        String rst;
        rst = capitalMethod("korea");
        
        //[2]: 출력
        System.out.println("입력한 소문자의 대문자는=" + rst);
    }
}

 

 

5. static, 스태틱, 선언, 메서드

 

1) static 선언이 안 되어있는 메서드를 사용하는 방법에 대해서 코드로 구현해보시오.

 

//문제
public class Java100_method_ExamStatic2 {
    
    public void helloWorld() {
        System.out.println("Hello, World~^_^");
    }
    
    public static void main(String[] args) {
        
        //[1]: 메서드 호출
        helloWorld();
    }
}

//풀이
public class Java100_method_ExamStatic2 {
    
    public void helloWorld() {
        System.out.println("Hello, World~^_^");
    }
    
    public static void main(String[] args) {
        
        //[1]: 메서드 호출
        //helloWorld(); //메인 메서드는 static메서드만 호출할 수 있기 때문에 에러.
        
        //[2]: 객체 생성 후 메서드 호출
        Java100_method_ExamStatic2 jes = new Java100_method_ExamStatic2();
        jes.helloWorld();
    }
}

 

 

6. 메서드, 인자, 전달, Call by value

 

1) 메서드로 인자 전달시 정수 100을 보냈을 때의 아래 코드의 결과를 말해보시오.

 

public class Java100_method_MethodCall1 {

    //[!]: Call by value --> 값에 의한 호출 --> 값에 의해서 (메서드를) 호출
    //메서드로 인자값을 넘길 때 해당 값을 복사하여 넘기는 방식 --> 따라서 sum() 메서드 내부에서는 복사된 값으로 처리를 한다.
    public static void sum(int a) {
        a = a + 400;
        System.out.println(a); //500
    }
    
    public static void main(String[] args) {
    
        //[1]: 변수 선언 및 메서드 호출
        int a = 100;
        sum(a); //500
        
        //[2]: 출력
        System.out.println(a); //100
    }
}

 

 

7. Call by reference, 메서드, 메인

 

1) 메인 메서드에서 100을 보냈을 때 값이 수정되게끔 Call by reference 방식으로 코드를 수정하시오.

 

public class Java100_method_MethodCall2 {

    public static void sum(Integer a) {
        a += 400;
        System.out.println(a); //500
    }
    
    public static void main(String[] args) {
    
        //[1]: 변수 선언 및 메서드 호출
        //Wrapper클래스의 Integer클래스 타입으로 변수 a를 선언하고, new로 객체를 생성하여 해당 주소 값을 메서드로 보낸다.
        Integer a = new Integer(100); //Call by value 방식임
        sum(a);
        
        //[2]: 출력
        System.out.println(a); //100
    }
}

 

8. Call by value, Call by reference, 호출

 

1) 메인 메서드에서 정수 100을 Call by reference 방식으로 메서드 호출하는 코드를 구현하시오.

 

class TestNumber {
    int num;
    TestNumber(int num) {this.num = num;}
}

public class Java100_method_MethodCall3 {

    public static void sum(TestNumber a) {
        System.out.println(a); //TestNumber 주소값
        System.out.println(a.num); //100
        a.num = a.num + 400;
        System.out.println(a.num); //500
    }
    
    public static void main(String[] args) {
    
        //[1]: 객체변수 선언
        TestNumber a = new TestNumber(100);
        sum(a); //a는 주소값
        
        System.out.println("------------------------");
        System.out.println(a.num); //500
    }
}

 

 

9. 리턴, 반환, 메서드, 정수

 

1) 2개의 정수형 값을 리턴하는 메서드를 구현하시오.

 

import java.util.Arrays;

public class Java100_method_TwoReturn1 {

    public static int[] testMethod() {
        int num1 = 100;
        int num2 = 200;
        return new int[] {num1, num2};
    }
    
    public static void main(String[] args) {
    
       //[1]: 배열 변수 선언 --> 메서드로부터 반환 받을 값이 배열이기 때문에
       int result[] = testMethod();
       
       //[2]: 출력
       System.out.println(result); //주소값이 출력됨
       System.out.println(result[0] + "-" + result[1]); //100 - 200
       System.out.println(result[0] + result[1]); //300
       System.out.println(Arrays.toString(result)); //반복문 사용 없이 한방에 모든 요소를 출력
       //[100, 200]
    }
}

 

 

10. 반환, 반환값, 메서드, 구현

 

1) 반환값이 2개 있는 메서드를 구현해보시오.

 

import java.util.Arrays;

public class Java100_method_TwoReturn2 {

    public static String[] capitalMethod(String a, String b) {
        String a_ = a.toUpperCase();
        String b_ = b.toLowerCase();
        
        //리턴값 2개를 저장할 배열 변수 선언
        String[] ret = {a_, b_};
        return ret;
    }

    public static void main(String[] args) {
    
        //[1]: 반환값-->O	받는 인자값-->O
        //반환값이 있다는 것-->메서드(호출) 호출에 따른 리턴값이 있다는 것-->호출부에서 리턴값을 받는 변수 정의
        String[] result = capitalMethod("korea", "USA");
        
        //[2]: 출력    
        System.out.println(result); //주소값 출력됨
        System.out.println(result[0]); //KOREA
        System.out.println(result[1]); //usa
        System.out.println(result[0] + "-" + result[1]); //KOREA - usa
        System.out.println(Arrays.toString(result)); //[KOREA, usa]
        
    }

}