본문 바로가기
[김영한 자바 강좌] 정리/입문

[김영한의 자바 입문] - 코드로 시작하는 자바 첫걸음(섹션6 ~ 10)

by haeyoon 2024. 4. 13.

몰랐거나 헷갈렸거나 중요한것같은 개념 위주로 정리했다!

 

 

1. 스코프

스코프(Scope)란?

변수의 접근 가능한 범위

 

스코프 존재 이유?

  - 효과적인 메모리 사용

  - 코드 복잡성 감소


2. 스캐너(Scanner) 학습

사용자가 변수에 값을 입력 받고싶으면 어떻게 코드를 작성해야할까?

 

scanner

자바는 Sysyem.in을 통해 입력을 받을 수 있지만 해당 방법은 복잡하다.

따라서 이런문제를 해결하기 위한 클래스가 Scanner클래스이다.

package scanner;

import java.util.Scanner;

public class Scannner1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("문자열을 입력하세요:");
        String str = scanner.nextLine(); //입력을 String으로 가져온다
        System.out.println("입력한 문자열: "+ str);

        System.out.print("정수을 입력하세요:");
        int intValue = scanner.nextInt();
        System.out.println("입력한 정수: "+ intValue);

        System.out.print("실수를 입력하세요:");
        double doubleValue = scanner.nextDouble();
        System.out.println("입력한 실수: "+ doubleValue);
    }
}

입력 및 출력:

 

[예제1] 두 숫자의 합

package scanner;

import java.util.Scanner;

public class Scanner2  {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("첫번째 숫자를 입력하세요: ");
        int num1 = scanner.nextInt();

        System.out.print("두번째 숫자를 입력하세요: ");
        int num2 = scanner.nextInt();

        int sum=num1+num2;
        System.out.println("두 숫자의 합: "+ sum);
    }
}

 

[예제2] 두 숫자 입력받고 더 큰 숫자 출력하기

package scanner;

import java.util.Scanner;

public class Scanner3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("첫번째 숫자를 입력하세요: ");
        int num1 = scanner.nextInt();

        System.out.print("두번째 숫자를 입력하세요: ");
        int num2 = scanner.nextInt();

        if(num1>num2)
            System.out.println(num1);
        else if (num1<num2) {
            System.out.println(num2);
        }
        else
            System.out.println("동일한 숫자입니다,");
    }
}

 

[예제3] 사용자가 입력한 문자열 출력하기

exit이라는 문자가 입력되면 프로그램을 종료한다.

프로그램은 반복해서 실행된다.

package scanner;

import java.sql.SQLOutput;
import java.util.Scanner;

public class ScannerWhile1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true){
            System.out.print("문자열 입력:");
            String str = scanner.nextLine();
            if(str.equals("exit")){
                System.out.println("프로그램 종료");
                break;
            }
            System.out.println("입력된 문자열:"+str);
        }
    }
}

3. 배열

package array;

public class Array1 {
    public static void main(String[] args) {
        int[] students; //1. 배열 변수 선언
        students = new int[5]; //2. 배열 생성 (배열의 참조값 생성)

        System.out.println(students); //참조값 확인가능

        //3. 배열 초기화
        students[0] = 100;
        students[1] = 90;
        students[2] = 80;
        students[3] = 70;
        students[4] = 60;
    }
}

 

배열 생성과 초기화 동시에 하는 법

package array;

public class Array1 {
    public static void main(String[] args) {
        int [] students; //배열 변수 선언
	students = new int[][90, 80, 70, 60, 50]; //배열 생성과 초기화
    }
}

4. 메서드(Method)

자바에서는 함수를 메서드라한다.

 

메서드 정의

public static int add(int a, int b){
	// 메서드 본문, 실행 코드
}

제어자 반환타입 메서드이름 (매개변수 목록){
	메서드 본문
}

 

[코드]

package method;

public class Method1Ref {
    public static void main(String[] args) {
        //계산 1
        int sum1 = add(5,10);
        System.out.println("결과1 출력 "+ sum1);

        System.out.println("=========");

        //계산 2
        int sum2 = add(15,20);
        System.out.println("결과2 출력 "+ sum2);
    }

    //add 메서드 정의
    public static int add(int a, int b){
        System.out.println(a + "+" + b + "연산 수행");
        int sum = a+b;
        return sum;
    }
}

 

1) 메서드 선언(Method Declaration)

메서드 이름, 반환 타입, 파라미터(매개변수) 목록을 포함한다.

public static int add(int a, int b);

+ 메서드 선언을 통해 다른 곳에서 해당 메서드를 호출할 수 있다.

 

* 매서드 호출

메서드 이름에 입력값을 전달해 실행하는 것

int sum1 = add(5, 10);
int sum2 = add(15, 20);

 

2) 메서드 본문(Method Body)

메서드가 수행해야하는 코드 블록이다,

{
        System.out.println(a + "+" + b + "연산 수행");
        int sum = a+b;
        return sum;
}

메서드 본문은 블랙박스이다.

 메서드를 호출하는 곳에서는 메서드 선언은 알지만 메서드 본문은 모르기 때문

 

 

3) 용어정리 - 인수(Argument) vs 매개변수(Parameter)

호출: call("hello", 28);
메서드 정의: int call(String str, int age);

- 인수: "hello", 28처럼 넘기는 값

- 매개변수: 메서드를 정의할때 선언된 변수인 String str, int age

 

4) 메서드 오버로딩(Overloading)

오버로딩(Overloading)이란?

이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것

add(int a, int b)
add(int a, int b, int c)
add(double a, double b)

 

오버로딩 규칙

  메서드의 이름이 같아도

   - 매개변수의 타입이 다른 경우        → O

   - 매개변수의 순서가 다른 경우        → O

   - 반환 타입이 다른 경우                   

int add(int a, int b)
double add(int a, int b)

                                                            → X

 

[예제1] 매개변수의 개수가 다른 오버로딩

public class Overloading1 {
    public static void main(String[] args) {
        System.out.println("1: "+ add(1,2));
        System.out.println("2: "+ add(1,2,3));
    }
    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;
    }
}

 

[예제2] 매개변수의 타입이 다른 오버로딩

public class Overloading2 {
    public static void main(String[] args) {
        myMethod(1, 1.2);
        myMethod(1.2, 1);
    }

    public static void myMethod(int a, double b){
        System.out.println("int a, double b");
    }
    public static void myMethod(double a, int b){
        System.out.println("double a, int b");
    }
}

 

[예제3]

public class Overloading3 {
    public static void main(String[] args) {
        System.out.println("1: "+ add(1,2));
        System.out.println("2: "+ add(1.5,2.4));
    }
    public static int add(int a, int b){
        System.out.println("1번 호출");
        return a+b;
    }
    public static double add(double a, double b){
        System.out.println("2번 호출");
        return a+b;
    }
}