1. 함수(Function)
1️⃣ 함수란?
1) 함수의 개념
특정한 일을 하도록 미리 만들어 놓은 ‘작업 버튼’ 같은 것
- 어떤 일을 묶어서
- 이름을 붙여두고
- 필요할 때마다 불러서 쓰는 코드 덩어리
→ 함수는 입력을 받아서 정해진 작업을 한 뒤 결과를 내놓는 코드 덩어리
⚠️ 상태에 따라 다른 값이 나오는 건 함수라고 할 수 없음
2) 자바에서 함수
👉 자바에는 “독립 함수”가 없다
⚠️ 자바에서는 모든 함수 = 클래스 안에 있는 메서드(Method)
2️⃣ 함수의 기본 구조(일반적인 개념)
1) 기본 구조
반환값 함수이름(입력값) {
처리 내용
return 결과;
}2) 예시
add(3, 5) → 83️⃣ 함수의 구성 요소
1) 함수 이름
- 함수 호출 시 사용
2) 매개변수(Parameter)
- 함수로 전달되는 값
3) 반환값(Return)
- 함수 실행 결과
- 없으면
void
4️⃣ 함수의 호출 과정
- 함수 호출
- 매개변수 값 전달
- 함수 내부 실행
- return 값 전달
- 호출 위치로 복귀
📌 이 과정은 Stack 메모리에서 이루어짐
5️⃣ Consumer (소비자, 소비 함수)
1) 개념
입력은 받지만(consume), 아무것도 돌려주지 않는 함수
👉 값을 받아서 사용(소비)만 하고, 반환값은 없음
2) Consumer가 필요한 경우
- 출력
- 로그
- 값 저장
- 화면 표시
3) 실습
void 입력해서 사용
package ex04;
// add(+), minus(-), multi(*), divide(/)
public class Cal01 {
static void add(int a, int b){ //void 중요! 생략불가
System.out.println("a+b="+(a+b));
}
static void minus(int a, int b){
System.out.println("a-b="+(a-b));
}
static void multi(int a, int b){
System.out.println("a*b="+(a*b));
}
static void divide(int a, int b){
System.out.println("a/b="+(a/b));
}
public static void main(String[] args) {
add(3,5); //static에 있는 것 "class이름.OO"로 불러 와야 함. 같은 파일에서는 생략 가능
minus(10,7);
multi(2,6);
divide(16,4);
}
}
6️⃣ Supplier (공급자, 공급 함수)
1) 개념
함수로 도출된 값을 공급(리턴)하는 함수
2) Supplier가 필요한 경우
- 객체 생성
- 기본값 제공
- 지연 로딩(Lazy Loading)
3) 실습
int, String 등 return값의 타입을 입력해서 사용
package ex04;
// add(+), minus(-), multi(*), divide(/)
public class Cal02 {
static int add(int a, int b){
return a+b;
}
static int minus(int a, int b){
return a-b;
}
static int multi(int a, int b){
return a*b;
}
static int divide(int a, int b){
return a/b;
}
public static void main(String[] args) {
int r1 = add(3,5);
int r2 = minus(3,5);
int r3 = multi(3,5);
int r4 = divide(3,5);
System.out.println(r1+r2+r3+r4);
}
}
2. 메서드(Method)
1️⃣ 메서드란?
클래스 안에 정의된 동작(행위), 객체가 할 수 있는 일을 코드로 표현한 것
행위를 통해 상태(변수)를 변경
⚠️ 상태에 따라 출력값이 달라지거나 상태를 변경시키는 것은 메서드
⚠️ 객체 지향 프로그래밍에서 상태에 따라 변경되는 메서드 지양
2️⃣ 메서드의 기본 구조
1) 기본 구조
접근제어자 반환타입 메서드이름(매개변수) {
실행문;
return 반환값;
}2) 예시
public int add(int a,int b) {
return a + b;
}3️⃣ 메서드의 구성 요소
1) 접근 제어자
public: 어디서나
protected: 상속 관계
default: 같은 패키지
private: 클래스 내부
2) 반환 타입
- 메서드 실행 결과 타입
- 없으면
void
void print() { }3) 메서드 이름
- 동사형 권장 (
calculate,print)
4) 매개변수
- 메서드 호출 시 전달받는 값
- 여러 개 가능
5) return 문
- 메서드 종료
- 반환값 전달
4️⃣ 메서드의 호출
1) 인스턴스 메서드
Calculator c=new Calculator();
int result= c.add(3,4);📌 객체를 통해 호출
2) static 메서드
- 객체 생성 ❌
- 클래스 소속
class MathUtil {
static int square(int x) {
return x * x;
}
}int r = MathUtil.square(5);5️⃣ 메서드와 메모리 구조
- 호출 시 Stack 영역에 쌓임
- 지역 변수는 메서드 종료 시 제거
main()
└─add()
└─ return6️⃣ 실습
package ex04;
public class Tv01 {
boolean on = false; // 상태 / 메인 전에 적으면 상태가 됨. 메인 안에 적으면 상태 아님.
public static void main(String[] args) {
// 이 라인에서는 static만 떠있는 상태
Tv01 tv = new Tv01(); // 객체(Object) 생성 / new class명() - static이 아닌 것들 메모리(힙이라는 공간)에 다 띄움
System.out.println(tv.on);
tv.on = true;
System.out.println(tv.on);
}
}false → on으로 상태 변경. 문법적으로는 맞지만 프로그램에서 이렇게 사용하지 않음
상태는 무조건 행위를 통해 변경 → 이게 메서드
행위를 적는 라인은 class 중괄호 안에 입력(main 전)
package ex04;
public class Tv01 {
boolean status = false; // 상태 / 메인 전에 적으면 상태가 됨. 메인 안에 적으면 상태 아님.
void on(){ // on을 실행하면 true로 상태가 변화 -> 메서드
System.out.println("tv가 켜졌어요.");
status = true; // 상태변경
}
void off(){ // off를 실행하면 false로 상태가 변화 -> 메서드
System.out.println("tv가 꺼졌어요.");
status = false;
}
public static void main(String[] args) {
// 이 라인에서는 static만 떠있는 상태
Tv01 tv = new Tv01(); // 객체(Object) 생성 / new class명() - static이 아닌 것들 메모리(힙이라는 공간)에 다 띄움
System.out.println(tv.status);
tv.on();
System.out.println(tv.status);
tv.off();
System.out.println(tv.status);
}
}
필기 정리

Share article