2023-12-14 (6일차) - void, return, 함수실행문과 return 코드분석

·2023년 12월 14일

📅 2023-12-14, 6일차

Review

선언위치에 따른 변수

전역변수

  • 선언위치: 클래스 영역
    • 인스턴스 변수
      • 객체변수
      • 같은 클래스에서만 사용가능
    • 클래스 변수
      • static을 붙인 변수
      • 다른 클래스에서도 호출이 가능
      • 객체화를 시키지 않고 사용가능

지역 변수

  • 선언위치: 메서드 영역
  • 매개변수도 지역변수의 일종

메서드

선언부-> static void(int a, int b) { 

  메서드 구현부
  
}

void

  • 빈, 허공, 아웃풋이 없다, 리턴안해
static void(int a, int b) { 

  System.out.println(a + b);
  
  }
 
 // 아웃풋이 없음
  • void 자리에 함수가 끝나고 난 자리에 남을 값의 타입을 넣어야 한다
  • void를 제외한 나머지는 무조건 return을 해야한다

return

  • 해당 함수가 끝난 자리에 함수실행하고 나오는 값을 돌려주는 것
  • 함수 실행하고 나오는 값을 돌려줄게
  • return에 도달하면 그 함수는 끝난다
    • 함수 내부에 return 이후에 코드를 적으면 unreachable code라며 에러가 뜸
  • 출력문과 return은 관련이 없다
    • 출력은 콘솔에 찍기만 하니까
    • return은 값을 돌려주는 것
  • match return type
    • return type과 return value는 같아야 한다
static int(int a, int b) {

  System.out.println(a + b);
  
  return 10;
  }
 
 // 이제 아웃풋이 생김

코드분석하기

import java.awt.Point;
// 좌표상의 위치를 나타낼 때 편리한 Point 클래스
import java.util.Arrays;
// 배열을 다루기 위한 다양한 메소드가 포함되있는 Arrays 클래스

//Point와 Arrays클래스는 이미 자바에 만들어져있는 클래스니까 import하여 불러내야함

// Main 클래스에는 지금 총 4개의 메서드가 있다
// main 메서드를 기준으로 위에서부터 아래로 봐야한다

class Main {
  public static void main(String[] args) {
    String message = greet("Alice"); // greet 함수를 찾아가보자
    System.out.println(message);

    Point point = createPoint(5, 10);   // createPoint 함수를 찾아가보자
    // Point 타입 //자바에 이미 있는 클래스니까 import해야함
    System.out.println("Point created at (" + point.x + ", " + point.y + ")");

    int[] evens = firstNEvenNumbers(5); // firstNEvenNumbers 함수를 찾아가보자
    System.out.println("First 5 even numbers: " + Arrays.toString(evens)); 
    // Array클래스내부에있는 메소드 호출 // string으로 변환 // evens 인자를 받는 매개변수
  }

  public static String greet(String name) {
    return "Hello, " + name + "!";
    // 메서드 선언부 - static을 사용해서 객체화하지 않고 함수 만듬
    // 메서드 선언부 - message라는 변수는 String 타입이라 return 타입이 String만 가능함
    // 메서드 구현부 - return 한 걸 message라는 변수에 넣고 돌려주겠다는 뜻
    // 매개변수에 Alice라는 인자값을 받아고, return statement에 return 하고 함수 실행값을 message변수에 담음
    // message 변수에 담긴 실행값을 출력
  }

  public static Point createPoint(int x, int y) { // x좌표 y좌표
    // 좌표 공간의 지정된 위치 (x, y)에 점을 구축해 초기화
    return new Point(x, y);
    // 마찬가지로 static을 사용해서 객체화하지 않고 함수 만들건데
    // return 타입이 Point타입
    // new를 사용해서 만든 Point 객체 안에있는 공간에 인자값 x인 5와 y인 10을 받고 return
    // 쉽게 말해 new Point(x, y) 객체를 point 변수에 연결
    // point 변수에 리모컨으로 객체에 연결해서 x과 y의 데이터를 출력
  }

  public static int[] firstNEvenNumbers(int n) {
    int[] evenNumbers = new int[n];
    for (int i = 0, num = 2; i < n; i++, num += 2) { // 초기화 1번, 컨디션체크 1번, 업데이트 2번
      evenNumbers[i] = num;
    }
    return evenNumbers;
    // int[] -> return 타입
    // n개의 공간이 있는 정수들만 담을 배열객체를 하나 만들어서 evenNumbers라는 변수와 연결할건데
    // n에 인자값 5를 받아서 5개의 공간을 만들겠다는 뜻
    // 반복문 사용해서 5번 반복해서 정수 num의 값을 2씩 증가시키며 짝수 5개를 evenNumbers 리모콘에 연경
    // 저장된 배열을 return 해서 메인클래스에서 출력

    // 출력문에 Arrays.toString(evens)는 배열을 출력하겠다는 Array클래스의 함수를 적어서 배열객체 내부에있는 정보들을 출력
    // 자바에서 배열의 변수 그대로 출력하게 되면 배열의 주소값이 출력됨
    // 배열의 내용을 출력하기 위해 Arrays.toString()을 사용해야한다.
  }
}

문제풀이 및 함수호출문만 보고 함수 만들기

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

    // 함수호출문을 살펴보면, 함수선언문을 어떻게 만들어야할지 알 수 있다.
    // new 사용해서 객체생성 안했기때문에 static인지 알수있고, return받아서 담을 변수는 없으니 void가 함수선언문에 들어간다

    계산기.더한결과를_화면에_출력(10, 20);
    // 출력 => 결과 : 30

    계산기.더한결과를_화면에_출력(50, 20);
    // 출력 => 결과 : 70

    계산기.뺀결과를_화면에_출력(50, 20);
    // 출력 => 결과 : 30

    계산기.뺀결과를_화면에_출력(5, 2);
    // 출력 => 결과 : 3

    계산기.곱한결과를_화면에_출력(5, 2);
    // 출력 => 결과 : 10
  }
}

class 계산기 {

  static void 더한결과를_화면에_출력(int i, int j) {

    System.out.println(i + j);

  }

  static void 뺀결과를_화면에_출력(int i, int j) {

    System.out.println(i - j);
  }

  static void 곱한결과를_화면에_출력(int i, int j) {

    System.out.println(i * j);

  }

}
//문제 - 함수를 실행하면 값을 돌려주도록 만들어주세요.

class Main {
  public static void main(String[] args) {
    int 결과;

    // new 사용해서 객체생성 안했기때문에 static인지 알수있다
    // return받아서 담을 변수가 있으니 변수타입을 보고 함수선언문의 return 타입을 정할 수 있다
    결과 = 계산기.(10, 20);
    System.out.println("결과 : " + 결과);
    // 출력 => 결과 : 30

    결과 = 계산기.(30, 20);
    System.out.println("결과 : " + 결과);
    // 출력 => 결과 : 50

    결과 = 계산기.(30, 70);
    System.out.println("결과 : " + 결과);
    // 출력 => 결과 : 100

    결과 = 계산기.(30, 70);
    System.out.println("결과 : " + 결과);
    // 출력 => 결과 : -40

    결과 = 계산기.(3, 7);
    System.out.println("결과 : " + 결과);
    // 출력 => 결과 : 21
  }
}

class 계산기 {

  static int(int i, int j) {
    return i + j;

  }

  static int(int i, int j) {
    return i - j;
  }

  static int(int i, int j) {
    return j * j;

  }

}
//문제 - 1부터 n까지의 합을 반환하는 함수
class Main {
  public static void main(String[] args) {

    // new 사용해서 객체생성 안했기때문에 static인지 알수있다
    // return받아서 담을 변수가 있으니 변수타입을 보고 함수선언문의 return 타입을 정할 수 있다
    int 결과1 = Math.oneToNSum(3);
    System.out.println("결과1 : " + 결과1);
    // 출력 : 결과1 : 6

    int 결과2 = Math.oneToNSum(10);
    System.out.println("결과2 : " + 결과2);
    // 출력 : 결과2 : 55
  }
}

class Math {
	// 함수 안에서 반복문도 가능하고 return value도 줄 수 있다
  static int oneToNSum(int n) {

    int sum = 0;
    for (int i = 1; i <= n; i++) {
      sum += i;
    }
    return sum;

  }

}
// 문제 - n부터 m까지의 합을 반환하는 함수
// 위 문제와 똑같은 방식으로 해결 할 수 있는 문제이다, 다만 매개변수와 인자의 값을 잘 일치시키도록 하기
class Main {
  public static void main(String[] args) {
    int 결과1 = Math.nToMSum(2, 3);
    System.out.println("결과1 : " + 결과1);
    // 출력 : 결과1 : 5

    int 결과2 = Math.nToMSum(5, 10);
    System.out.println("결과2 : " + 결과2);
    // 출력 : 결과2 : 45
  }
}

class Math {

  static int nToMSum(int n, int m) {

    int sum = 0;
    for (; n <= m; n++) { // 반복문 초기화자리가 비어있는 이유는, 매개변수자리에 이미 선언이됐기때문이다
      sum += n;
    }
    return sum;

  }
}

메소드선언문에서,

  • public 아무나써
  • protected 부모자식간의 상속 할때 사용
  • private 나만쓸꺼야

💡 같은 패키지안에 클래스 생성하면 다른 .java 파일에서도 사용할수있다
💡 패키지분리하면 클래스를 공유 할 수 없다.

📢 강사님 advice

  • 서사가 있어야한다
  • '공부를 열심히한' 비전공자
  • '공부하다'와 '학습하다'는 다르다
  • 시간을 쪼개서 공부하기
  • 욕심을 내려면 근거가 있어야한다
    • 그것을 공부로 보여줘야한다

⏰ 나의 평일 시간표 ⏰

  • 7:00 - 8:30 준비/ 아침식사
  • 8:30 - 9:00 이동
  • 9:00 - 18:00 수업 (8시간)
    • 12:00 - 13:00 점심
  • 19:00 - 20:00 저녁
  • 20:00 - 24:00 공부 (4시간)
  • 24:00 - 25:00 취침준비/휴식/취침

🤔 느낀점

  • 자바기초수업땐 print랑 return이랑 차이를 구분 못했었고 return의 개념을 이해하기 어려웠었다.
    더 공부해보니 둘은 전혀 상관이 없던거였다..
    return은메서드의 실행결과 값을 반환하는 거와 동시에 그 메서드가 종료된다고 알려주는 것이다. print는 단순히 화면에 출력하는것으로 끝나는거다. 반환이 아니기에 코드 재활용성이 떨어진다. return은 하나의 값으로 존재하기에 재활용이 가능하다.
  • 오늘도 반복문을 사용해서 n 부터 m 까지의 합을 구해야하는 문제가 나왔다. 반복문은 알겠는데 유독 '합을 구하는' 문제만 나오면 뚝딱거린다. 왜그러는지 이유는 잘 모르겠다. 누구한텐 눈 감고도 할 수 있는 간단한 문제겠지만 나도 계속 반복숙달해서 눈감고도 할 수 있게 만들어야겠다.
  • 내가 계획해논 시간표대로 최대한 맞춰서 움직여보자.

👩‍💻 TO DO

  • 자바 OOP특징에 대해서 공부해보자
  • 런타임과 컴파일타임
profile
hello world

0개의 댓글