언어/JAVA

자바 기초문법/ 메소드 / 오버로딩 / 함수

nakgopsae 2024. 6. 10. 14:30

처음 프로그래밍을 배울 때 함수와 메소드가 같은 것인줄 알았다

 

함수란

 

- 프로그래밍의 기본적인 구성요소로, 입력(인자,매개변수) 등을 받아서 작업을 실행하고 결과를 출력하는 독립적인 코드블록이다

 

-특정 클래스의 멤버로 속하지 않은 전역적인 함수 전역함수 등을 말한다

 

function hello(){
    console.log("hello");
}
let obj = {
    sayHello: function (){
        console.log("hello");
    }
}
hello();//함수
sayHello();//객체에 속한 메소드

 

메소드란

 

- 특정 객체 /클래스 에 속한 함수를 의미한다

 

- 메소드는 클래스의 멤버이며 해당 객체또는 클래스를 통해서 호출한다

 

- 특정 기능들을 모아놓은 코드의 집합체이고 그 기능을 수행한 후 결과 값을 반환한다( 반환이 없을 수도 있음)

 

class Solution {
    fun hello(){
        println("hello")
        // 여기서 println은 표준 라이브러리 함수 임!
    }//클래스 내부에 선언되어있으니 메소드
}

fun sayHello(){
    println("hello")
}
//확장함수

메소드 선언 과 본문

 

public static int add(int a, int b) {
        return a + b;
    }
     }
    //제어자 반환타입 메소드이름(매개변수){
    // 메소드 본문
    //
    
    // 메서드본문은 호출하는 곳에서 선언을 알지만 본문은 모른다 
    // return 문으로 반환결과를 적어준다

 

! 자바는 함수안에 함수를 정의할 수 없다

여태 쓰던 자바스크립트와 코틀린 과의 차이이니 습관적으로 쓰지 않도록 하자


메서드 호출과 용어 정리

public class Practice {
    public static void main(String[] args) {

        int sum = add(3,4); //호출 call
        //여기서 인수 인자값은 3,4


    }
    public static int add(int a, int b) {
        return a + b;
    }
    // 메서드 선언에서 사용한 변수는 매개변수 / 파라미터라고 한다
   // 메서드를 호출할 때 인수를 넘기면 매개변수에 대입해서 결과를 만든다

}

 

인수, 인자 와 매개변수 , 파라미터를 혼용하지 말자

 


매개변수가 없거나 반환타입이 없는 경우

public static void main(String[] args) {
        print01();
        print02();
    }

    public static void print01(){
        System.out.println("Hello World");
    }
    public static void print02(){
        System.out.println("Bye World");
    }

 

프린트01 과 프린트 02는 매개변수가 없고 반환값도 없다


반환타입

public class Practice {
    public static void main(String[] args) {
        boolean result = odd(2);
        System.out.println(result);
    }
    public static boolean odd(int n){
        if(n%2==1){
            return true;
        }//else{
         //   return false;
        //}
    }

 

반환 타입이 있으면 반드시 값을 반환 해야한다

return이 없다 - 반환 값이 없다 - 오류가 난다


return

public static void main(String[] args) {
        check(10);
        check(20);
    }
   public static void check(int age){
        if(age <18){
            System.out.println("18살 미만은 담배 못삼");
            return;
        }
        System.out.println("담배사라");
   }

 

메서드는 return을 만나면 메서드를 종료 시킨다


자바의 메서드 호출과 값 전달 방식 ( call by value)

자바는 항상 변수의 값을 복사해서 대입한다

 

public static void main(String[] args) {
        int num1 = 5;
        System.out.println("1. changeNumber 호출 전, num1: " + num1); //5
        changeNumber(num1);
        System.out.println("4.changeNumber 호출 후 num1"+ num1);//5 함수를 끝내고
        다시 변수를 호출햇을때는 5가 나온다
    }
    public static void changeNumber(int num2) {
        System.out.println("2. changeNumber 변경 전, num2: " + num2);//5
        num2 = num2*2;
        System.out.println("3. changeNumber 변경 전, num2: " + num2);//10

    }

 

4번의 변수를 출력하면 5가 나온다 함수가 변수 자체의 영향을 주지는 않는다 

 

    public static void main(String[] args) {
        int num1 = 5;
        System.out.println("changeNumber 호출 전, num1: " + num1);//5
        num1 = changeNumber(num1);
        System.out.println("changeNumber 호출 후, num1: " + num1);//10
    }
    public static int changeNumber(int num2) {
        num2 = num2*2;
        return num2;

    }

 

이 경우에는 num1에 대입을 했기때문에 변수 num1이 변화한다


메서드 형변환

메서드를 호출할 때도 형변환이 적용된다 

 

명시적형변환

 public static void main(String[] args) {
      double number = 1.5;
//      printNumber(number);//타입 안맞음 오류
        printNumber((int)number);
        //명시적 형변환을 적용했다
    }
    public static void printNumber(int n) {
        System.out.println(n);
    }

 

자동형변환

public static void main(String[] args) {
        int number = 100;
        printNumber(number); // int 에서 double 로 자동 형변환
    }
    public static void printNumber(double number) {
        System.out.println(number);
    }
    //int<long<double 작은 값을 큰값 파라미터로 넘기면 자동으로 형변환이 된다

메서드 오버로딩

메서드 오버로딩이란 

 

같은 이름의 메서드를 중복하여 정의하는 것을 말한다 

 

한 클래스 내에서 같은 이름의 메서드를 두개이상 가질수 없지만 매개변수의 갯수나 타입을 다르게 하면 하나의 이름으로 다른메서드를 여러개 만들수 있다

 

메서드 시그니처 =메서드 이름 + 매개변수 타입

 

메서드 이름이 같아도 시그니처가 다르다면 다른 메서드로 간주한다 

public static void main(String[] args) {
        System.out.println("1:" + add(1,2));
        System.out.println("2:"+add(1,2,3));
        System.out.println("3:"+add(1,2.4));
    }
    //1번 메서드
    public static int add(int a, int b) {
        System.out.println("1번 메서드");
        return a+b;
    }
    public static int add(int a, int b, int c) {
        System.out.println("2번 메서드 매개변수의 갯수가 다르다");
        return a+b+c;
    }
    public static double add (int a , double b){
        System.out.println("3번 메서드 매개변수의 타입이 다르다");
        return a+b;
    }

 

 

int add(int a, int b)
double add(int a, int b)
* 반환 타입은 시그니처로 간주하지 않음

 

 

'언어 > JAVA' 카테고리의 다른 글

문자열 포매팅  (0) 2024.06.21
문자열 내장 메서드  (0) 2024.06.21
자바 기초문법 / 문자 <-> 숫자  (0) 2024.06.05
자바 기초문법 / 형변환  (1) 2024.06.05
자바 기초문법 / 반복문  (0) 2024.06.05