💡 학습 목표 함수와 메서드의 이해 함수 호출과 JVM 스택 메모리 |
함수란 뭘까?
함수(Function)는 프로그래밍에서 특정 작업을 수행하는 코드의 집합으로, 입력을 받아 처리 후 결과를 반환할 수 있습니다. 함수는 코드의 재사용성을 높이고, 프로그램의 구조를 체계적으로 관리(유지보수)할 수 있게 도와줍니다.
- 하나의 기능을 수행하는 일련의 코드 묶음이다.
- 구현된(정의된) 함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 실행의 제어가 반환된다.
- 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있다.
함수 설계하기
함수는 이름, 파마메터(매개 변수), 반환 값, 함수 몸체(body)로 구성
함수 사용하기( 사용하기는 모양 맞추기 )
public static void main(String args[] args) {
// 함수 사용하기는 이름을 호출해서 사용할 수 있다.
add(5, 10); // 함수에 사용은 모양 맞추기 이다.
int resultAdd = add(100, 200);
// 함수는 여러번 호출이 가능, 재사용이 가능, 리턴 타입이 있다면 결과값을 받을 수 있다.
} // 메인 함수
함수 작용
함수를 설계하는 문법
함수를 호출하는 문법
a.name <-- 변수 접근하는 것
() <-- 함수나 메서드를 호출
시나리오 실습 1 - FunctionMainTest1 만들어 주세요
package basic.ch06;
// 자바의 모든 코드는 class XXX {} 블로안에 코드를 작성하기로 약속 되어 있다.
public class FunctionMainTest1 {
// 메인 함수: void - 텅빈(리턴값이 없다)
public static void main(String[] args) {
} // end of main
} // end of class
// int a; 사용 못 함
시나리오 실습 2 - Function1 만들어 주세요
package basic.ch06;
public class Function1 {
// 두 숫를 받아서 덧셈하는 함수를 만들어 보자.
static int add(int n1, int n2) {
int result; // 변수 ->> 지역변수
result = n1 + n2;
return result;
} // end of add (함수) - 함수 안에 선언하는 변수는 지역 변수라고 한다.
}
💡 FunctionMainTest1 파일에서 add 함수를 호출할려면 다른 파일에 있어서 가지고 올 수 없다. 추후 다른 문법을 배운 이후에 가지고 올 수 있다. 지금 다시 코드 수정 |
시나리오 코드 3
package basic.ch06;
// 배운다음 ...
// 자바의 모든 코드는 class XXX {} 블로안에 코드를 작성하기로 약속 되어 있다.
public class FunctionMainTest1 {
// 메인 함수: void - 텅빈(리턴값이 없다)
public static void main(String[] args) {
System.out.println("여기 메인 함수를 시작합니다.");
int result1 = add(5, 10);
System.out.println("result1 : " + result1);
// 성적 합을 구한다
int result2 = add(90, 80);
System.out.println("result2 : " + result2);
} // end of main
// 두 숫를 받아서 덧셈하는 함수를 만들어 보자.
static int add(int n1, int n2) {
int result; // 변수 ->> 지역변수
result = n1 + n2;
return result;
} // end of add (함수) - 함수 안에 선언하는 변수는 지역 변수라고 한다.
} // end of class
// int a; 사용 못 함
시나리오 코드 4
package basic.ch06;
public class FunctionMainTest2 {
public static void main(String[] args) {
// 함수를 언제든지 호출해서 사용할 수 있다.
addNum(10, 10, 10);
System.out.println(30);
System.out.println(addNum(10, 10, 10));
int result = addNum(10, 10, 10);
System.out.println("resutl : " + result);
System.out.println("---------------");
sayHello("어서오시게"); // 함수에 호출을 모양 맞추기이다.
int result2 = calcSum();
System.out.println("resutl : " + result2);
} // end of main
// 함수 설계, 함수 사용
// 세개의 정수값을 받아서 덧셈하는 기능을 만들어보자.
static int addNum(int n1, int n2, int n3) {
int result = 0;
result = n1 + n2 + n3;
return result;
}
// 리턴 값이 없는 함수를 만들어보자.
static void sayHello(String greeting) {
System.out.println(greeting + " : 데커드 케인");
}
// 매개 변수가 없는 함수를 만들어보자.
static int calcSum() {
int sum = 0;
int i;
for(i = 1; i <= 100; i++) { // 회수 101번 동작하는 녀석
// 0 = 0 + 1
// 1 = 0 + 2
// 3 = 3 + 3
sum = sum + i; // 5050
}
return sum;
}
} // end of class
함수 호출과 JVM 스택 메모리
- 스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리
- 함수의 수행이 끝나면 자동으로 반환 되는 메모리
package basic.ch06;
public class Function1 {
public static void main(String[] args) {
int num1;
int num2;
int sum;
add(10, 10);
} // end of main
static int add(int n1, int n2) {
int result;
result = n1 + n2;
return result;
}
// 연습 문제
static int calcSum() {
int sum = 0;
int i;
for (i = 1; i <= 100; i++) { // 횟수 100 번 동작 하는 녀석
// 0 = 0 + 1
// 1 = 1 + 2
// 3 = 3 + 3
sum = sum + i; // 5050
}
return sum;
}
}
package basic.ch06;
public class Function1 {
public static void main(String[] args) {
int n1;
int n2;
add(10, 10);
calcSum(1, 10);
int sum;
// 함수의 호출은 모양 맞추기
int result2 = calcSum(7, 200);
System.out.println("result2 : " + result2);
} // end of main
static int add(int n1, int n2) {
int result;
result = n1 + n2;
return result;
}
// 연습 문제
// 함수를 수정 -- 파라메터 정수 2개를 받을 수 있도록 설계
// s1, s2 -->
// 1, 10 ---> 55
// 7, 200 --->
static int calcSum(int s1, int s2) { //두개의 값을 받기위해 파라미터 설계
// 1 + 2 + 3 + 4
int sum = 0;
int i;
for (i = s1; i <= s2; i++) { // 같은 파라미터
sum = sum + i;
}
return sum;
}
}// end of class
복습
package basic.ch07;
import java.util.Scanner;
public class User {
// User라는 이름으로 묶음
String id;
String password;
String nick;
String gender;
int age;
// 패스워드 체크하는 기능을 만들어 보기
// 동사로 시작하는 것이 권장사항
public boolean checkPassword(String inputPwd) {
// 만약 나의 멤버 변수에 들어가 있는
// password 값과 외부에서 넣을 inputpwd 값이
// 같다면 true 반환 아니면 false 반환 하라
// == 주소값, 산술식 사용한다.
// 문자열 비교는 equals 라는 메서드를 사용한다.
if(password.equals(inputPwd)) {
System.out.println("비밀번호가 맞았습니다.");
return true;
}
System.out.println("비밀번호가 틀렸습니다.");
return false;
}
// 독립적인 함수로서 여기서 실행 시킬 수 있다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// User 클래스를 인스턴스화 시켜 주세요.
User user1 = new User(); // 메모리에 올라간다.(heap)
user1.password = "123";
User user2 = new User();
user2.password = "555";
System.out.println("===============");
// user1 pwd를 확인하고 싶다.
// 1
boolean userResult1 = user1.checkPassword("333");
System.out.println("user1 : " + userResult1);
// 2
boolean userResult2 = user1.checkPassword("123");
System.out.println("user1 두번째 결과 : " + userResult2);
System.out.println("=======================");
// 참조변수 user2 기능인 checkPassword 호출해서 결과를 확인 해주세요.
// -- F -- 1
boolean user2Result1 = user2.checkPassword("666");
System.out.println();
// -- T -- 2
boolean user2Result2 = user2.checkPassword("555");
System.out.println();
// 실행에 흐름 만드는 방법 연습이다.
// if 구문을 활용해서
// 콘솔창에 비밀번호가 틀렸습니다. 출력
// 콘솔창에 비밀번호가 맞습니다. 출력
} // end of main
} // end of class
'Java > JAVA 2 - 객체지향 핵심' 카테고리의 다른 글
JAVA 2 - 메소드(method)와 변수 (0) | 2024.04.15 |
---|---|
JAVA 2 - 함수와 만들기 {연습문제} (0) | 2024.04.15 |
JAVA 2 - 객체에 값 할당하기 (0) | 2024.04.15 |
JAVA 2 - 클래스와 객체 (0) | 2024.04.15 |
JAVA 2 - OOP(객체지향) 란? (0) | 2024.04.15 |