ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수(function)
    Java 2023. 2. 12. 14:45

     

     

     

    함수

    하나의 기능을 수행하는 일련의 코드

    함수의 길이와는 상관없이 하나의 기능만을 한다.

     

    호출하여 함수가 실행된 후 값을 반환할 수 있다.

    (반환할려면 꼭 return을 써야한다. 안쓸려고 해도 오류가 뜬다. 기능을 다시 써야하기 때문에)

     

    함수가 선언되면 여러 곳에서 호출되어 사용될 수 있다.

    (만약 더하기라는 함수가 있다면 거리를 더하던 숫자를더하던 성적을 더하던 더하기라는 한 기능을

    여러곳에서 호출해서 사용할수 있다.)

     

    함수를 사용시 장점은 코드의 재사용성,가독성을 높일 수 있다

     

    매개변수

    함수의 정의에서 전달받은 인수를 함수내부로 전달하기 위해 사용하는 변수

    함수가 호출될 때 함수로 값을 전달해준다.

     

    함수 정의하기

    함수는 이름,매개변수(입력값), 반환 값(결과 값), 함수 몸체(body) 4가지로 구성되지만

    매개변수와 반환 값은 경우에 따라 생략 될 수있다.

     

     

    함수 호출 경로

    package ch05;
    
    public class addNumber {
    	static int add(int num1,int num2){
    		int result;
    	    	result = num1 + num2;	
    	    	return result;
    	}
    
    	public static void main(String[] args){
    	int Number = add(2,7);
    	System.out.println("Number"+Number);	//Number9
    	}
    }

    위에서 생성한 addNumber함수를 호출하기 위해 메인 함수에서 매개변수가 2개이기 때문에 add함수에2,7의값을 넣어 함수를 호출하고 호출된 값을 Number 변수에 저장하여 호출해서 출력값이 Number9가 나온다.

     

     

    return은 왜 쓰이는가?

    package ch05;
    
    public class addNumber {
    	static int add(int num1,int num2){
    		int result;
    	    	result = num1 + num2;	
    	    	return result;
    	}
    
    	public static void main(String[] args){
    	int Number1 = add(2,7);
    	System.out.println("Number"+Number1);	//Number9
    	int Number2 = add(2,6);
    	System.out.println("Number"+Number2);	//Number8
    	}
    	
    }

    위에 코드를 보면 이미 Number1에서 이미 기능을 수행한후에 result값이 정해졌는데

    Number8이 나온것을 확인 할수 있다. 여기에서 알수 있는것은 기능을 할때 값이 정해지지 않고

    기능을 수행하기 위해선 return을 넣어 기능을 초기값으로 돌려놔야 다음에 내가 원하는값을 넣고 재 사용할수있다.

     

    로또게임을 만들어보자.

    package ch05;
    
    // Random 가지고 오다 --> LottoGame.java 파일로 !!! 
    import java.util.Random;
    
    public class LottoGame {
    
    	// 함수를 만들 때 반드시 어떠한 기능을 만들지 정의하고 코드 작성해 주세요 
    	// 랜덤 숫자 하나를  반환 하는 기능을 만들어 보자. 
    	static int randomNumber() {
    		// JDK 가 만들어준 도구를 이용해 보자. 
    		Random random = new Random();
    		// 랜덤 값을 하나 생성 반환 --> 45 
    		// 0부터 시작한다 --> 0 ~ 44 반환 --> 46 ---> 0 ~ 45  
    		int resultNumber = random.nextInt(45) + 1;
    		return resultNumber; 
    	}
    	
    	// 코드 실행 메인 함수 
    	public static void main(String[] args) {
    		//System.out.println(randomNumber());
    		int r1 =  randomNumber();
    		int r2 =  randomNumber();
    		int r3 =  randomNumber();
    		int r4 =  randomNumber();
    		int r5 =  randomNumber();
    		int r6 =  randomNumber();
    		System.out.println(r1 + " :  " + r2 + " : " + r3 + " : " + r4 + " : " + r5 + " : " + r6 );
    
    	} // end of main
    위의 코드를 분석해보면 메인 함수에서 r1~r6라는 변수가 ramdomNumer 함수를 호출 하였다.
    호출할때마다 기능이 한번씩 실행이 되며 Random random = new Random();은 랜덤으로 값이 나오게 해주는것이며 int(정수) resultNumber(변수) = random.nextInt(45) + 1;의 코드를 해석해보면 nextInt(45)가 값의 범위를 지정해주고 컴퓨터 언어상 0~45의 범위이기 때문에 1을 더해 1~46의 값이 나오도록 하였고 resultNumber란 변수에 그 값을 저장하고 그값이 메인 함수에 출력되게 하였다.
    정리를 하자면 main에서 호출될때마다 기능이 한번씩 실행되며 1~46의 값중 랜덤으로 값을 변수에 담아
    r1~r6까지 6번 기능을 수행하였다. 여기서 return이 있기 때문에 변수에 고정된 값이 있지 않고 초기화 시켜 새로운값을 담을수 있어서 결과를 볼때 각자 다른값이 나와 로또번호가 찍히는것처럼 출력값이 나오게 된다.

     

     

     

    여기서 new 연산자에 대해서 개념을 잡고 가자

    앞서 String이란 변수는 참조형 변수라고 배웠다.

    		String str1    = "string";
    		String str2	= "string";	 
    		System.out.println(str1==str2); 		//true
    		String str3 = new String("string");
    		String str4 = new String("string");
    		System.out.println(str3==str4); 		//false

    new를 쓰면 똑같은 값을 가지더라도 false가 나온다.

    즉 new 연산자는 객체를 heap이라는 메모리 영역에 메모리 공간을 새로 할당해주고 메모리주소를 반환한 후 생성자를 실행시켜준다.

    리터럴과 달리 new 연산자로 생선된 객체는 똑같은 값을 가진 객체가 있어도 서로 다른 메모리를 할당하기 때문에 서로 다른 객체로 분류된다.

     

     

     

     

     

     

     

     

     

    정리

    함수는 하나의 기능을 수행하는 일련의 코드이다.

    매개변수는 함수가 호출될때 함수로 값을 전달해준다.

    함수 호출 경로는 main에서 함수이름을 호출하고 매개변수값을 넣으면
    함수이름을 입력한대로 호출이 되어 매개변수 값에 따라 기능을 수행한후 값이 나오게 된다.

    return을 써서 반환하는 이유는 기능을 한번만 쓸거는 아니기 때문에 반환해서
    초기상태로 돌려놓는다.

    new 연산자를 쓰면 heap 메모리 영역에 같은값을 가지더라도 메모리 공간을 새로 할당해주어서
    같은값이지만 저장된 메모리공간이 달라 다른값이다. 

    'Java' 카테고리의 다른 글

    생성자  (0) 2023.02.12
    함수와 스택 메모리  (0) 2023.02.12
    객체 지향 언어  (0) 2023.02.12
    반복문 - for,while 조건문 - whitch  (0) 2023.02.12
    조건문 - if  (0) 2023.02.12
Designed by Tistory.