본문 바로가기

Java

Java- 콘솔 입출력

콘솔 출력

 System.out.println( )의 이해

public class toStringPractice {
    public static void main(String[] args) {
        StringBuilder stb = new StringBuilder("123");
        System.out.println(stb.toString());  
        System.out.println(stb);  //위와 동일한 결과
        
        stb.append(4567);
        System.out.println(stb.toString());
        System.out.println(stb);
    }
}


123
123
1234567
1234567

  일반적인 문자열 출력 메소드인 System.out.println( )은 문자열을 출력하는 메소드인데,  System.out.print( )와는 단지 개행 여부 차이만 존재한다. 그런데 위의 코드를 보면 String이 아닌 StringBuilder 인스턴스 stb를 이 메소드에 넣었을 때도 출력이 정상적으로 이루어지는 것을 확인할 수 있다. 

  

System.out.println(stb.toString());  // (1)
System.out.println(stb);             // (2)

위의 (1)과 (2)의 결과가 같다는 것을 어떻게 이해할 수 있을까?

 

 사실 System.out.println( )은 해당 인스턴스의 public Stirng toString( ) 메소드를 호출하고 이때 반환되는 문자열을 출력하는 메소드이다. 즉 만일 String이 아니더라도 다른 클래스에 toString()이 존재한다면 얼마든지 위와 같은 결과를 만들 수 있다는 것이다.

 

 즉, (1)은 내부 인자인 stb.toString()이 반환한 String 인스턴스의 toString( )으로 반환된 문자열을 출력한 것이고, (2)는

StringBuilder 인스턴스인 stb의 toString()을 호출히여 반환된 문자열을 출력한 것이다.

 

따라서 아래와 같은 경우도 가능하다.

class Box{
    private String data;
    Box(String data){
        this.data = data;
    }
    void append(String str){
        data += str;
    }
    public String toString(){  //직접 구현한 toString()
        return data;
    }
}
public class toStringPractice {
    public static void main(String[] args) {
        Box box = new Box("abc");  
        
        System.out.println(box.toString());  //box.toString()으로 String 인스턴스(data)가 반환  
        //println()이 String 인스턴스의 toString() 호출 후 반환된 문자열 출력
        
        System.out.println(box);  
        //println()이 Box 인스턴스의 toString() 호출 후 반환된 문자열 출력
        
        box.append("def");
        System.out.println(box.toString());
        System.out.println(box);
    }
}

abc
abc
abcdef
abcdef

 

콘솔 입력

 Scanner 클래스

 콘솔 입력은 Scanner 클래스를 사용한다. Scanner 클래스는 생성자로 전달되는 대상으로부터 데이터를 추출하는 기능을 제공한다.

 다음은 문자열로 부터 int형 자료형을 추출하는 과정이다.

import java.util.Scanner;

public class 콘솔입력 {
    public static void main(String[] args) {
        String source = "1 3 14";
        Scanner sc = new Scanner(source);  //sc == 키보드 입력 인스턴스
        int num1 = sc.nextInt(); //1
        int num2 = sc.nextInt(); //3
        int num3 = sc.nextInt(); //14

        int sum = num1 + num2 + num3;
        System.out.printf("%d + %d + %d = %d",num1, num2, num3, sum);
    }
}

1 + 3 + 14 = 18

 

 

 키보드 입력

  키보드의 입력과정에는 Scanner sc = new Scanner(System.in);을 사용한다

import java.util.Scanner;

public class 콘솔입력 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  //sc == 키보드 입력 인스턴스
        System.out.print("문자열 입력>>");
        int num1 = sc.nextInt();
        System.out.print("문자열 입력>>");
        int num2 = sc.nextInt();
        System.out.print("문자열 입력>>");
        int num3 = sc.nextInt();

        int sum = num1 + num2 + num3;
        System.out.printf("%d + %d + %d = %d",num1, num2, num3, sum);
    }
}

 

Scanner 클래스 메소드들

  -int nextInt( );  

  정수 추출

 

  -String nextLine( );

  문자열 추출

 

  -double nextDouble( );

  double 추출

 

  -boolean nextBoolean( );

  불값 추출

'Java' 카테고리의 다른 글

Java- 상속  (0) 2022.12.29
Java- 배열  (0) 2022.12.27
Java- 문자열 결합의 최적화(StringBuilder 클래스)  (0) 2022.12.27
Java- 메소드 오버로딩과 this  (0) 2022.12.26
Java- main 메소드  (0) 2022.12.26