3월 ~ 5월) 자바/java

7Day - ArraySort / Method / MethodApp

첼로그 2023. 4. 5. 18:11

ArraySort

 

// OOP(Object Oriented Programming) - 객체 지향 프로그래밍
// > 객체를 이용하여 프로그램을 작성하는 방식
// > 현실에 존재하는 대상들을 모델링 하여 클래스로 선언하고, 선언된 클래스를 객체로 생성하여
// 객체의 요소를 사용하여 프로그램을 작성하는 방법
// > 추상화, 캡슐화, 다형성, 상속성
// 객체 모델링 - 현실에 존재하는 대상을 속성과 행위로 구분하여 설계
// 추상화 - 설계된 대상을 클래스로 (필드와 메소드로) 선언
// 클래스 배포가능 : 프로그램의 생산성 증가 및 유지보수의 효율성 증가

방법 1)

// 배열에 저장된 모든 요소값을 오름차순 정렬하여 출력하는 프로그램 작성

	import java.util.Arrays;
        /*
        int[] array = {30, 50, 10, 40, 20};

        System.out.println("정렬 전 >> ");
        for (int num : array) {
            System.out.println( num + " ");
        }
        System.out.println();


        // 배열 요로값을 선택 정렬 알고리즘을 사용하여 오름차순 정렬하여 저장

        for(int i = 0; i < array.length-1; i++) {
            for(int j= i + 1; j < array.length; j++) {
                if(array[i] > array[j]) {
                    int temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
                }
            }
        }

        System.out.print("정렬 후 >> ");
        for(int num : array) {
            System.out.print(num+" ");
        }
        System.out.println();
		*/
        
정렬 전 >> [30, 50, 10, 40, 20]
정렬 후 >> [10, 20, 30, 40, 50]

 

방법 2)

int[] array = {30, 50, 10, 40, 20};

        // Arrays 클래스 : 배열의 요소를 제어하는 기능의 메소드를 제공하는 클래스
        // Arrays.toString(Object[] array) : 배열을 전달받아 배열의 모든 요소값들을 문자열로 변환하여 반환하는 메소드
        System.out.println("정렬 전 >> "+ Arrays.toString(array));

        //Arrays.sort(Object[] array) : 배열을 전달받아 배열의 모든 요소값들을 오름차순
        //정렬하는 메소드
        Arrays.sort(array);

        System.out.println("정렬 후 >> "+Arrays.toString(array));
        
        
정렬 전 >> [30, 50, 10, 40, 20]
정렬 후 >> [10, 20, 30, 40, 50

 


Method

 

// 메소드 (Method) - 클래스 내부에 선언된 함수 - 멤버함수
// > 필드(멤버변수)를 이용하여 필요한 기능을 제공하기 위한 명령의 모임
// 함수 (Function) - 매개변수로 값을 제공받아 계산하여 결과를 반환하는 명령의 모임 (기능)

 

// 메소드 선언하는 방법
// 형식) (반환형/자료형 = return) 메소드명 (자료형 변수명, 자료형 변수명, ...) { // ex String pizza (String ChesePizza, String HamPizza)
//          명령;
//          ...
//      }
// > 반환형 (ReturnType) = 메소드를 호출하여 얻을수 있는 결과값에 대한 자료형
// > void 자료형(무반환형) - 메소드를 호출하여 얻을 수 있는 결과값이 없는 경우
// 메소드의 ()기호에는 변수를 나열하여 선언 - 매개변수 (Parameter - Argument)
// > 메소드에 작성된 명령을 실행하기 위해 필요한 값을 메소드 호출시 전달받아 저장하기 위한 변수
// > 메소드에 작성된 명령을 실행하기 위한 값이 필요 없는 경우 매개변수 생략 가능

 

// 메소드 호출 () : 메소드에 작성된 명령을 실행하여 필요한 기능 제공
// 형식) 객체,메소드명(값, 값, ...)
// > 객체가 저장된 참조변수를 사용하여 객체의 메소드 호출
// > 메소드 호출시 매개변수에 차례대로 값을 전달하여 메소드 호출
// > 매개변수에 값이 정상적으로 전달되지 않은면 메소드 호출 - 에러 발생

 

// return - 메소드를 강제로 종료하기 위한 키워드 > ex { }와 같은것
// 형식 1) if(조건식) return;
// > 메소드 반환형을 [void]로 작성
// 형식 2) return 반환값;
// > 메소드를 종료하면서 반환값(변수 또는 연산식)을 메소드를 호출하는 명령에게 제공
// > 메소드의 반환형을 대상의 자료형과 반드시 같도록 작성

// 객체 생성(참조)이 목적인 메소드 - main 메소드 미작성

 

void displayOne () {
        System.out.println("Mathod 쿨래스의 displayOne() 메소드 호출");
    }
    
    void displayTwo () {
        System.out.println("Mathod 쿨래스의 displayOne() 메소드 호출");

 

  void  printOne() {
        int tot = 0;
        for (int i = 1; i <= 100 ; i++) {
            tot += i;
        }
        System.out.println("1~100 범위의 정수들의 합계 = " + tot);
    }

    void  printTwo (int num) {

        // 매개변수에 저장된 값에 대한 검증
        if (num <= 0) { // 비정상적인 값이 전달되어 저장된 경우
            System.out.println("[에러] 매개변수에는 0보다 큰 값이 저장되어야 됩니다.");
            return; // 메소드 종료

//        int tot = 0;
//        for (int i = 1; i <= num ; i++) {
//            tot += i;
//        } // 매개변수 : 값을 받아 메소드를 사용하려고
//        System.out.println("1~" + num + " 범위의 정수들의 합계 = " + tot);
//    }
        }
    }



    void  printThree(int num1, int num2) {
        // int tot = 0;
        /*
        if (num1 < num2) {
            System.out.println("[에러] 첫번째 전달값이 두번째 전달값보다 작아야 됩니다.");
            return; // 메소드 종료
        }
         */

        if (num1 > num2) {
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }

        int tot = 0;
        for (int i = num1 ; i <= num2 ; i++) {
            tot+=i;
        }
        System.out.println(num1 + "~" + num2 + " 범위의 정수들의 합계 = " + tot);
    }

 

 

int returnTOt (int num1, int num2) {
        int tot = 0;
        for (int i = num1 ; i <= num2 ; i++) {
            tot += i;
        }

        // 변수에 저장된 값을 메소드를 종료 하며 메소드를 호출하는 명령에게 반환
        // > 반환되는 값의 자료형과 메소드의 반환형이 반드시 동일
        return tot;

    }

    // 매개변수로 정수값을 전달받아 홀수와 짝수를 구분하여 반환하는 메소드
    // > false 반환 - 홀수 / true - 짝수
    boolean isOddEven (int num) {
        if (num % 2 != 0) {
            return false;
        } else {
            return true;
        }
    }

    // 배열을 반환하는 메소드
    int[] returnArray() { // int[참조변수]
        /*
        int[] array = {10, 20, 30, 40, 50};
        return array; // 배열의 메모리 주소 반환 - 배열 반환
         */

        // return {10, 20, 30, 40, 50}; // 에러발생
        return  new int[] {10,20,30,40,50};

    }
    // 매개변수 3개에 전달된 정수값들의 합계를 계산하여 반환하는 메소드
    int sumOne(int num1, int num2, int num3) {
        return num1+num2+num3;
    }

    // 매개변수로 배열을 전달받아 배열의 모든 요소값들의 합계를 계산하여 반환하는 메소드
    int sumTwo(int[] array) {
        int tot=0;
        for(int num : array) {
            tot += num;
        }
        return tot;
    }

    // 매개변수 생략 기호(...)를 이용하여 매개변수를 작성하면 값을 0개 이상 전달받아
    // 메소드에서 배열처럼 사용 가능
    int sumThree(int... array) {
        int tot=0;
        for(int num : array) {
            tot += num;
        }
        return tot;

    }
}

MathodApp

// 실행이 목적인 클래스 - main 메소드를 반드시 작성

// 프로그램 실행시 JVM(Java Virtual Machine)이 자동 호출하는 특별한 메소드

// 클래스로 객체를 생성하여 객체의 메모리 주소를 참조변수에 저장 ▽
        // > 같은 패키지에 작성된 클래스는 패키지 표현없이 클래스 사용 가능
        // > 참조 변수를 사용하여 객체의 필드 또는 메소드 접근 가능
        Method method = new Method();

        // 참조변수를 출력할 경우 "자료형@메모리주소" 형식의 문자열을 제공받아 출력
        System.out.println("method = " + method);
        
method = oop.Method@1a407d53
// 메소드 호출 : 객체를 이용하여 메소드를 호출하면 프로그램 흐름(스레드)은 객체의 메소드로
        // 이동하여 메소드의 명령을 실행하고, 메소드가 종료되면 다시 되돌아와 다음명령 실행

        // 참조변수 method/ 매개변수 displayOne
        method.displayOne(); // method. 하면  displayOne(); 생김
        method.displayTwo();
        method.displayOne();
        
Mathod 쿨래스의 displayOne() 메소드 호출
Mathod 쿨래스의 displayOne() 메소드 호출
Mathod 쿨래스의 displayOne() 메소드 호출

 

        method.printOne();
        method.printOne();
        
1~100 범위의 정수들의 합계 = 5050
1~100 범위의 정수들의 합계 = 5050

 

 

method.printTwo(50);
        method.printTwo(80);
        method.printTwo(-30); // 정상적인 결과 X > 매개변수값이 정상이아니라서
//        method.printTwo(200000000); // 쓰레기값 나옴
//        method.printTwo(80.0); // 오류뜸

[에러] 매개변수에는 0보다 큰 값이 저장되어야 됩니다.

 

method.printTwo(50);
        method.printTwo(80);
        method.printTwo(-30); // 정상적인 결과 X > 매개변수값이 정상이아니라서
//        method.printTwo(200000000); // 쓰레기값 나옴
//        method.printTwo(80.0); // 오류뜸
        System.out.println("------------------------------------------");
        method.printThree(35, 79);
        method.printThree(19, 88);
        method.printThree(67, 12);
        
35~79 범위의 정수들의 합계 = 2565
19~88 범위의 정수들의 합계 = 3745
12~67 범위의 정수들의 합계 = 2212

 

// 반환되는 값이 존재하는 메소드 호출
        // 메소드를 호출하면 반환되는 값이 존재 > 반환값을 변수에 저장
        // > 메소드의 반환값을 지속적으로 사용하고자 할경우 반환값을 변수에 저장
        int result = method.returnTOt(30, 70);
        System.out.println("합계(메소드 호툴의 반환값) = " + result);
        // 메소드의 반환값을 일시적으로 사용할 경우 반환값을 변수에 미저장
        System.out.println("합계(메소드 호툴의 반환값) = " + method.returnTOt(20, 80));
        
합계(메소드 호툴의 반환값) = 2050
합계(메소드 호툴의 반환값) = 3050

 

boolean result1 = method.isOddEven(10);
        if (result1) {
            System.out.println("매개변수로 전달된 값은 [짝수]입니다.");
        } else {
            System.out.println("매개변수로 전달된 값은 [홀수]입니다.");
        }

        // 조건식 대신 메소드의 반환값이 이용하여 명령을 선택실행
        if (method.isOddEven(9)) {
            System.out.println("매개변수로 전달된 값은 [짝수]입니다.");

        } else {
            System.out.println("매개변수로 전달된 값은 [홀수]입니다.");
        }
        
매개변수로 전달된 값은 [짝수]입니다.
매개변수로 전달된 값은 [홀수]입니다.

 

/ 배열의 메모리 주소를 반환하는 메소드를 호출하면 반환된 메모리 주소를 참조변수에 저장
        // > 참조변수에 저장된 메모리 주소를 사용하여 배열 참조 가능

        int[] array = method.returnArray();
        for (int num : array) {
            System.out.print(num + " ");
        }
        System.out.println();
        
10 20 30 40 50

 

System.out.println("합계 = " + method.sumOne(10, 20, 30));
        // 매개변수에 값이 정상적으로 전달되지 않을 경우 메소드 호출에 대한 에러 발생
        // System.out.println("합계 = "+method.sumOne());
        // System.out.println("합계 = "+method.sumOne(10,20));
        // System.out.println("합계 = "+method.sumOne(10,20,30,40));
        
합계 = 60

 

방법 1)

 //System.out.println("합계 = "+method.sumTwo(10, 20, 30));//에러 발생
        //매개변수의 배열의 메모리 주소를 전달하여 메소드 호출
        System.out.println("합계 = "+method.sumTwo(new int[]{10, 20, 30}));
        System.out.println("합계 = "+method.sumTwo(new int[]{}));
        System.out.println("합계 = "+method.sumTwo(new int[]{10, 20}));
        System.out.println("합계 = "+method.sumTwo(new int[]{10, 20, 30, 40}));
        
        
합계 = 60
합계 = 0
합계 = 30
합계 = 100

방법 2)

	System.out.println("합계 = "+method.sumThree(10, 20, 30));
        System.out.println("합계 = "+method.sumThree());
        System.out.println("합계 = "+method.sumThree(10, 20));
        System.out.println("합계 = "+method.sumThree(10, 20, 30, 40));
        
합계 = 60
합계 = 0
합계 = 30
합계 = 100

 


https://docs.oracle.com/en/java/javase/17/docs/api/index.html