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 |