어떠한 특정 작업을 수행하기 위한 명령문의 집합으로,
중복을 피하여 프로그램을 모듈화하기 위해 사용함.
함수와 다른 점이 무엇일까 ?!
둘 다 특정한 무언가를 수행하기 위해 존재하며
둘의 차이점은 독립적이냐 종속적이냐의 차이다.
함수는 독립적으로 존재하고, 메소드는 class 및 객체에 종속적이다.
1) 함수는 객체가 필요하지 않아 독립적이나, 메서드는 개체 이름으로 호출할 수 있다.
2) 함수는 데이터를 전달하거나 반환하는데 사용되며, 메소드는 클래스에서 데이터를 작동한다.
// 1부터 10까지의 합인 total 값을 구한다면 ?
// for 문 -> total += i 활용할 수 있다.
// 거기에 또 20까지 더해준다면 ?! 또 for 문을 작성해서 돌리게 된다.
// 이와 같은 번거로움을 해결하기 위해 메서드를 만들어 호출한다.
package practice;
public class JavaPractice {
public static int sumAcc(int start, int end){
int total = 0;
for(int i = 1; i <= end; i++){
total += i;
}
return total;
}
public static void main(String[] args) {
System.out.println(sumAcc(1, 10));
}
}
메소드와 변수가 확장된 좀 더 큰 프로그램으로서,
여러 변수와 메서드의 집합.
field : 상태를 나타내는 필드.static 변수 : main 밖. static이 붙어있는 클래스 내의 변수.instance 변수 : static이 붙어있지 않은 클래스 내의 변수.local 변수 : main 안. 메소드 내의 변수.class myCalculator{
static int total = 0;
static int sum(int a, int b){
return a+b;
}
static int sumAcc(int a){
total += a;
return total;
}
}
class myCalculatorInstance{
// static 이 붙어있는 변수는 클래스 변수, static 이 붙어있지 않으면 객체 변수
int total = 0;
int sum(int a, int b){
return a+b;
}
// static -> 객체 변수에 접근이 안됨. (total 에 접근 불가)
void sumAcc(int a){
// this 는 객체 그 자신을 의미.
// 만약 a 대신 total 이 들어가더라도 this 를 활용하면 명확하게 인식함.
this.total += a;
}
}
클래스를 통해 만들어진 복사본과 같은 개념.
클래스명 객체의변수명 = new 클래스명();

객체가 과자라면, 클래스는 객체를 찍어낸 틀과 같다 !
클래스는 기능의 집합으로, 객체를 정의하기 위해서 쓰인다.
나 곰돌이 과자틀로 과자 만들거야 !
과자를 밀가루랑, 설탕이랑, 계란으로 만들거야 !
피크닉 가서 맛있는 과자를 먹어야지 ~
짠 과자 완성 ~
과자 틀 > 클래스 | @@로 과자를 만들어야지 ~ > 객체 | 과자 > 인스턴스
인스턴스는 클래스로부터 만들어진 구체화된 형태의 자료형이다.
하나의 클래스로 여러 개의 인스턴스를 만들 수 있으며,
인스턴스는 독립된 자신만의 메모리 공간을 소유한다.
메서드 호출 방식
객체를 위한 클래스의 전형적인 구조
getter / setter 패턴자바에서는 객체가 생성될 때 호출하는 메서드.
public class Car{
private String modelName;
Car(String modelName){
this.modleName = modelName;
}
}
메서드 오버로딩 : 하나의 클래스 내에서 같은 이름의 메서드를 여러 번 정의하는 것을 의미.
매개변수를 다르게 설정하여 같은 이름의 메서드를 여러개 생설할 수 있다.
→ 매개변수의 개수 또는 타입이 다르다면, 메서드 오버로딩이 가능 !
//public 이나 private 같은 접근제어자를 안 붙이면 기본적으로 default 접근 제어자 : 같은 패키지 내에서만 유효
static int sum(int a, int b){ //static -> sum(a,b) 호출 , static 아니면 클래스명.메서드();-> C0204~~.sum(a,b)
return a+b;
}
// 매개변수의 타입 또는 개수가 다르면 같은 이름의 메소드 정의 가능.
// 즉, 메소드 오버로딩.
double sum(double a, double b){
return a+b;
}
int sum(int a, int b, int c){
return a+b+c;
}
메서드 내부에서 해당 메서드가 또 다시 호출되는 것을 의미.
재귀 호출은 자기가 자신을 계속해서 호출하므로, 끝없이 반복.
→ while 문처럼 재귀 호출을 중단하도록 조건이 변경될 명령문을 반드시 포함해야 함.
public class C0206RecursiveBasic {
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <= 10; i ++){
sum += i;
}
System.out.println(sum);
System.out.println(addAcc(10));
// for 문으로 구할 수 있는 누적 합계를 재귀함수로 표현.
// 피보나치 수열 구현 => 100번째
// 1 1 2 3 5
int a = 1;
int b = 1;
for(int i = 2; i < 5; i++){
int temp = a;
a = b;
b = temp + a;
}
System.out.println(b);
System.out.println(fibonacci(15));
}
static int fibonacci(int n){
if(n <= 2){
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
}
static int addAcc (int n){
if(n == 1){
return 1; // 재귀함수를 멈추게 함 !
}
return n + addAcc(n-1);
}
}
메서드와 함수의 차이에 대해 추가적으로 공부가 필요한 부분인 것 같다🥲
메서드를 좀 더 확실히 이해해보고,
강사님께 함수와 메서드의 차이에 대해 질문하고 차이를 정확하게 파악하는 것이 다음주 목표 !