✎NHN Academy | JAVA

NHN Academy - 2024.08.22(Thu)

박순돌 2024. 8. 22. 17:09

Module 05 메소드와 파라미터

오늘의 시작 문제!! - BubbleSort 구현하기

public class bubblesort {
    public static void main(String[] args) {
        int[] a = {7, 4, 5, 1, 3};
    
        for(int i = 0; i < a.length; i++) {
            for(int j = 0; j < i; j++) {
                if(a[i] < a[j]) {   // 오름차순 : <   |   내림차순 : >
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
            
        }
    
        for(int j = 0; j < a.length; j++) {
            System.out.print(a[j]);
        }
    }
}

 

함수 ( function) 란?

 = 어떠한 값(코드의 묶음)이 주어지면 다른 결과값이 나오는 구조

 = Java 프로그램에서 특정 작업을 수행하는 일련의 문들을 하나로 묶은 문 그룹

 

메소드 == 함수(유사하다고 본다!)

  • main 메소드
    Java 응용 프로그램의 진입점(Application Entry Point)
  • println 메소드
    Java 라이브러리가 제공하는 표준 출력 메소드 + myMethod 메소드
    MyClass에 사용자 정의 선언된 static 메소드

 

 y = x + 1       ==>        int addOne(int x) {

                                           return x + 1;

                                     }

 

메소드의 시그너처

자바 프로그래밍 언어에서 메서드 시그너처는 메서드 명과 파라미터의 순서, 타입, 개수를 의미

public [ static ] return type 메소드 이름(parameter list(1개 이상이 올 수 O. <== type_name + parameter) { ... }

        바인딩 한정자                                                      formal parameter , parameter

 

메소드 호출

메소드 이름(parameter list 작성);     // actual parameter , argument

 

이름없는 함수 = 람다 표현


 

메소드의 사용 방법

     - 같은 클래스 내에서 메소드 호출

        :  메소드 이름 뒤의 괄호에 하나 이상의 파라미터를 사용

      - 다른 클래스에 있는 메소드 호출

        :  호출할 메소드가 있는 클래스를 표시

        : 호출되는 메소드는 private으로 선언되면 안됨

      - 중첩 호출

        : 메소드는 다른 메소드를 호출할 수 있고,

          다른 메소드를 호출하는 메소드를 호출할 수 있음

 

 

 

parameter는 지역변수와 같이 동작한다!

지역스택 = 콜스택(호출하면 스택이 생성되기 때문에)

 

결과값을 가지고 가지 않는다 = void

결과값을 가지고 간다 = 함수 / return

 

파라미터 = 메소드 이름 뒤에 ( ... ) 사이에 선언되는 인자들

   EX> void set(int i, String name) { ... } = Formal Parameter

           set(10, 'Celine'); = Actual Parameter // 10, 'Celine' 은 argument

 

메소드를 만든다. = 알고리즘을 활용한다.

 

거꾸로 읽어도 제대로 읽는 것과 같은 문장 = Palindrom      |      주어진 문장이 Palindrom 인지 true / false?

 

문장을 재조합했을 때, 다른 문장을 만들 수 있는가 여부 = Anagram

// 1. 문자열을 char[]로 변경  toCharArray(String value)
// 2. char[]에서 공백을 제거  removeWhiteSpace(char[] c)
// 3. char[]의 모든 문자를 소(대)문자로 변경  toLowerCode(char[] c)
// 4. 내림차순(오름차순)으로 정렬  Sort(char[] c)
// 5. 비교 후, 같으면 true / flase  isAnagram(char[] a, char[] b)


import java.util.*;

public class Anagram {
    public static char[] toCharArray(String value) {
        char[] result = new char[value.length()];

        for (int i = 0; i < result.length; i++) {
            result[i] = value.charAt(i);
        }

        return result;
    }

    public static char[] removeWhiteSpace(char[] array) {
        int count = 0;
        for (char c: array) {
            if (c != ' ') { count++; }
        }

        char[] result = new char[count];
        int index = 0;

        for (char c: array) {
            if (c != ' ') { result[index++] = c; }
        }

        return result;
    }

    public static char[] toLowerCase(char[] array) {
        char[] result = new char[array.length];
        int index = 0;

        for (char c: array) {
            if (((int)c) < 97) {
                result[index++] = (char)(c + 32);
            }
            else {
                result[index++] = c;
            }
        }

        return result;
    }

    public static void sort(char[] arr) {
        int n = arr.length;
        char temp = '0';

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

    public static boolean isEqual(char[] array1, char[] array2) {
        if (array1.length != array2.length) {
            return false;
        }

        for (int i = 0; i < array1.length; i++) {
            if (array1[1] != array2[1]) {
                return false;
            }
        }

        return true;
    }

    public static boolean isAnagram(String value1, String value2) {
        char[] array1 = toLowerCase(removeWhiteSpace(toCharArray(value1)));
        char[] array2 = toLowerCase(removeWhiteSpace(toCharArray(value2)));

        sort(array1);
        sort(array2);

        return isEqual(array1, array2) ? true : false;
    }

    public static void main(String[] args){
        String s1 = "I am Lord Voldemort";
        String s2 = "Tom Marvolo Riddle";

        System.out.println(isAnagram(s1, s2));
    }
}

 

 

알고리즘 계산하기(n부터 10까지의 연산 을 2가지 방법으로 표현하기).java

public class Algorithm {
    public static int addNto10(int n) {
        int result = 0;
        for(int i = n; i <= 10; i++) {
            result += i;
        }
        return result;
    }

    public static int addNtoNRecur(int n) {
        if(n > 10) { return 0; }
        else { return addNtoNRecur(n + 1) + n; }
    }

    public static void main(String[] args) {
        System.out.println(addNto10(1));
        System.out.println(addNtoNRecur(1));
    }
}

 

 

팩토리얼 계산하기.java

public class Factorial {
    static int factorial(int n) {
        if(n < 1) { return 1; }
        else { return factorial(n - 1) * n; }
    }

    public static void main(String[] args) {
        System.out.println(factorial(9));
    }
}

 

시그너처

 = 시그너처가 다르면 같은 이름의 함수가 존재 가능 O

 = 메소드 시그너처는 메소드의 이름, 파라미터의 타입, 파라미터의 개수로 구성

 = 파라미터의 이름, 메소드의 return 타입 영향 X

 

객체지향의 4가지 특징 = 추상화 캡슐화 상속성 다형성

객체지향의 5가지 원칙 = SOLID

                                = SRP (Single Responsibility Principle) 단일 책임 원칙

                                = OCP (Open-Closed Principle) 개방-폐쇄 원칙

                                = LSP (Liskov Substitution Principle) 리스코프 치환 원칙

                                = ISP (Interface Segregation Principle) 인터페이스 분리 원칙

                                = DIP (Dependency Inversion Principle) 의존 역전 원칙

 

 


 

 

'✎NHN Academy | JAVA' 카테고리의 다른 글

NHN Academy - 2024.08.26(Mon)  (0) 2024.08.26
NHN Academy - 2024.08.23(Fri)  (0) 2024.08.23
NHN Academy - 2024.08.21(Wed)  (0) 2024.08.21
NHN Academy - 2024.08.20(Tue)  (0) 2024.08.20
NHN Academy - 2024.08.19(Mon)  (0) 2024.08.19