12 - 1 콘솔 출력
* 콘솔 : 컴퓨터를 대상으로 데이터를 입력 및 출력하는 장치 총칭 ( 키보드, 모니터 등 )
* System.out.println -> ' 자바의 대표적인 콘솔 출력 메소드 '
< AutoCallToString >
class Box {
private String conts;
Box(String cont) {
this.conts = cont;
}
public String toString() {
return conts; // 문자열 반환. String 인스턴스의 참조값을 여기서 반환
}
}
public class AutoCallToString {
public static void main(String args[]){
StringBuilder stb = new StringBuilder("12") // 문자열 전달
stb.append(34);
System.out.println(stb.toString());
System.out.println(stb);
Box box = new Box("camera");
System.out.println(box.toString())
System.out.println(box);
}
}
< 출력 >
1234
1234
camera
camera
* Box 클래스, StringBulider 클래스의 공통점
-> “문자열을 반환하는 public String toString() 메소드가 정의되어 있다”
* System.out.println은 참조 값이 전달되면, 이 값의 인스턴스를 대상으로 toString 메소드를 호출한다. 그리고 이 때 반환되는 문자열을 출력한다.
* System.out.println(stb.toString());
-> toString 메소드를 호출했을때 반환하는 값이 println의 인자로 전달이 되어 출력하도록 함.
* System.out.println(stb);
-> 참조하고 있는 것 StringBulider --> 이 참조값을 바탕으로 참조값이 가리키는 인스턴스의 toString 메소드를 호출. 이 때 반환되는 문자열을 println 메소드가 출력
* System.out.println(box.toString())
-> println 메소드에는 Camera라는 String 인스턴스의 참조값이 전달이 된다. -> Camera 출력
* System.out.println(box);
-> box라는 참조변수가 가지고 있는 참조값을 그냥 통째로 전달. toString 메소드를 호출해서 (있다면) 반환되는 값이 아닌 그냥 던짐 --> 여전히 Camera출력
* println 또는 print에 인스턴스의 참조 값이 전달되면 해당 참조값이 참조하는 인스턴스의 toString 메소드가 반환하는 문자열 출력 !
IF) toString 메소드가 정의되어 있지 않다면?
먼저. 자바의 모든 클래스는 toString 클래스를 가지고 있다. 내가 정의하지 않아도 기본적으로 존재.
결론. toString 메소드가 존재하지 않는 인스턴스는 없다.
* 인스턴스에 참조값이 전달될 때 println이 내부적으로 하는 일
-> 전달된 참조값을 바탕으로 해당 인스턴스의 toString 메소드 호출 ( 인자를 받지 않는 String toString() 형태의 메소드 호출 )
따라서, String 인스턴스의 참조값이 문자열이 반환이 될 것. 이걸 println 메소드가 출력해냄.


' 전달되는 인자의 수가 다양 ! '
< FormatString >
public class FormatString {
public static void main(String args[]) {
int age = 20;
double height = 178.2;
String name = "YOON SUGN WOO";
System.out.printf(" name: %s \n", name);
System.out.printf(" age: %d \n height: %e \n\n", age, height);
System.out.printf(" %d - %o - %x \n\n", 77,77,77);
System.out.printf(" %g \n", 0.00014); // 적으면 그냥 소수점으로 나옴
System.out.printf(" %g \n", 0.000014); // 소수점 자리 수가 많아지면 지수 표기법으로
}
}
< 출력 >
name : YOON SUGN WOO
age : 20
height : 1.78000e+02
77 - 115 - 4d
0.000140000
1.40000e-05
12 -2 콘솔 입력 ( Console Input )
* Scanner 클래스 -> ' 데이터를 스캔하는 기능의 클래스. 키보드의 입력을 읽어들이는 코드를 쉽게 구성 ! '
- Scanner 클래스 자체를 이해하기 ! 이 클래스가 속한 패키지는 java.util이다.
Scanner 클래스는 생성자로 전달되는 대상으로부터 데이터를 추출하는 기능 제공( '읽어들인다' 라고 생각하기 ) . 그리고 Scanner 인스턴스들 파일이나 String 인스턴스 등 다양한 대상으로부터의 데이터 추출이 가능.
Ex) < ScanneringString > - String 인스턴스로부터 데이터 추출 ( 사실 이런 코드 작성할 일 ㅂㄹ )
import java.util.Scanner;
public class ScanneringString {
public static void main(String args[]) {
String source = "1 3 5";
Scanner sc = new Scanner(source); // Scanner 인스턴스 생성 -> 연결돼서 스캔 가능해짐
int num1 = sc.nextInt(); // int형 데이터 추출
int num2 = sc.nextInt();// int형 데이터 추출
int num3 = sc.nextInt(); // int형 데이터 추출
int sum = num1 + num2 + num3;
System.out.printf("%d + %d +%d = %d \n", num1, num2, num3, sum );
}
}
< 출력 >
1 + 3 +5 = 9
--> Scanner 클래스의 인스턴스 생성은 데이터를 뽑아 올 대상과의 '연결'을 의미한다. 연결후에는 데이터 스캔 가능 !
* Scanner sc = new Scanner(source);
-> Scanner 인스턴스와 인자로 전달된 source와의 연결로 이어진다. 그래서 참조변수 sc를 통해 데이터를 추출하면 source가 참조하는 대상으로부터 데이터가 추출이 된다.
그런데 , 예제에서 source는 문자열 -> 그러나 그 대상이 문자열이 아니더라도 데이터를 추출하는 방법은 달라지지 않는다.
< Scanner 클래스의 키보드 적용 >
* 장점 ) Scanner 인스턴스 생성 이후에 데이터를 스캔하는 방법에 있어서는 차이가 없다 ! ( 연결 만 끝나면 스캔하는 방법 차이 X ) 즉, 연결 대상에 의존적이지 않은 코드의 작성이 가능!
앞 예제를 수정해서 Scanner 인스턴스를 키보드와 연결하고자 함
Scanner sc = new Scanner( source ) ;
-> Scanner sc = new Scanner ( System.in ) // in -> static 변수
* Scanner의 생성자로 전달된 ' System.in은 키보드를 의미 -> 키보드를 의미하는 인스턴스의 참조변수 '
< ScanningKeyboard >
import java.util.Scanner;
public class ScanningKeyboard {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
int sum = num1 + num2 + num3;
System.out.printf("%d + %d + %d = %d \n", num1, num2,num3, sum);
}
}
< 출력 >
12 --> 12 치고 엔터 : 입력의 완료. Scanner클래스는 nextInt를 호츌한 상태니까 12를 불러와서 반환한다.
24
36
--> 3개의 정수형 데이터를 입력받겠다 !
12 + 24 + 36 = 72
* nextInt 메소드가 호출되면 키보드로부터 데이터가 입력될 때까지 프로그램 실행 '대기 상태'
< Scanner 클래스의 주요 메소드들 >
* int nextInt ( )
* byte nextByte ( ) -> Byte 형으로 데이터를 읽어들이겠다.
--> 둘 다 정수의 입력을 위한 메소드. 정수의 반환형에 차이가 존재.
Ex) 키보드로부터 8이 입력.
이를 nextByte로 읽으면 8이 byte형으로 반환. nextInt로 읽으면 8이 int형으로 반환
* String nextLine ( ) -> 문자열을 읽어들이는 메소드
* double nextDouble ( )
* bolean nextBoolean ( ) -> true or false 정보를 읽어들이겠다
< ReadString > -> nextLine 메소드 호출 관련 예제
import java.util.Scanner;
public class ReadString {
public static void main(String args[ ]){
Scanner sc = new Scanner(System.in); // 키보드의 입력을 받겠다.
System.out.println("문자열 입력 : " );
String str1 = sc.nextLine();
System.out.println("문자열 입력 : " );
String str2 = sc.nextLine();
System.out.printf("입력된 문자열 1 : %s \n" ,str1);
System.out.printf("입력된 문자열 2 : %s \n" ,str2);
}
}
문자열 입력 :
Today is Friday // 내가 입력함
문자열 입력 :
I love Java
입력된 문자열 1 : Today is Friday
입력된 문자열 2 : I love Java
'Java' 카테고리의 다른 글
| JAVA Programming(Ch 14. 상속) (0) | 2021.08.09 |
|---|---|
| JAVA Programming(Ch 13. 배열) (0) | 2021.08.09 |
| JAVA Programming(Ch 11. 메소드 오버로딩) (0) | 2021.08.08 |
| JAVA Programming(Ch 10. 클래스 변수) (0) | 2021.08.08 |
| JAVA Programming(Ch 9.정보 은닉) (0) | 2021.08.08 |