이직 시도 시 다니고 있던 인사팀 부장님에게 개발을 못한다고 극딜을 당한 쪼꼬미 인사드립니다.

 

현재는 웹 개발은 하지 않고 모바일 앱 검증 자동화 업무를 담당하고 있습니다..

 

2년전 첫 회사에 발을 내딛을 때는 저는 네트워크 전공자였고,

개발의 개자도 모르는 학생이었죠.

 

회사에도 개발은 해보지 않고 아두이노나 홈 iot 조금 개발해봤다.

라고 분명 말했지만 바로 큰 개발 프로젝트에 떡 하니 보내서 밤 새워가며 주말 출근 해가며

배우고 욕먹고 배우고 욕먹고의 반복이었는데

 

쪼꼬미에게 개발을 하나하나 알려준 사람이 못한다고 하면

아직 많이 부족한 점을 나도 알고 있기에 더 열띠미 해야징!! 하는데

 

갑자기 이직하겠다고 인사팀에 전화하니 내년 2월까지 더 있으라고 소리를 고래고래 지르며 ,,

나의 한계를 보라고 개발을 못하니까 다른 팀으로 넣어주겠다고 엄청난 디스를 하고

마지막에 마상을 남겨주신.. 그 분 덕분에

 

파이썬만 파다가 다시 Java 기초부터 잘 남겨놓자 !!! 맘을 먹은 쪼꼬미 !!!

 

고맙다 인사부장아 !!! 너 덕분에 다시 개발 공부한다.!!

내 한계가 뭔지는 모르겠지만 이왕 하는거 열심히 해보겠다!!!!!!!! 쓰읍!!!!!

 

그래서 오늘 준비한 컨텐츠는 콘솔 입출력입니다. ㅎㅎ

 

제가 가장 흥미롭고 쉽게 다가갈 수 있었던 콘솔 입출력 부터 차근차근 알아본 후

 

자료형, 내장클래스, 스프링 프레임워크를 사용한 게시판 만들기 등 많은 포토폴리오를 남겨놓겠다.!!

 

내가 어려워 했던 모바일 앱도 만들어 보겠다.!!

 

그럼 콘솔 입출력을 알아보러 슝~

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package scanner;
import java.io.InputStream;
import java.util.Scanner//Scanner클래스는 생성자의 입력으로 System.in -> 콘솔 입력인 InputStream을 필요로 한다.
 
public class ScannerTest {
    
    public static void main(String[] args) throws Exception{
        
        InputStream in = System.in//System.in 을 이용하면 콘솔 입력을 얻을 수 있다.
                                    //System.in은 InputStream의 객체임을 알 수 있다.
        
        /*InputStream은 자바의 내장 클래스이다.
         * 자바의 내장 클래스중에 java.lang 패키지에 속해 있지 않은 클래스는 필요할 때 항상 import 해서 사용해야한다.
         * 
         * 내장 클래스는 다음 포스팅에서 자세히 알아보자.
         */
        
        int a;
        
        a = in.read(); //InputStream의 read메소드는 1byte의 입력을 받아들인다.
                       //하지만 위에서 int 로 정의해준 것 과 같이 byte 자료형이 아닌 int 자료형으로 저장된다.
        
        /*int 값은 0-255 사이의 정수 값으로 아스키 코드 값이다.
         * 
         * 자료형의 대한 포스팅을 참고하면 좋을 것 같다. 
         */
        
        System.out.println(a);
    }
    
 
}
 
cs

 

 

요기서 잠깐 ٩◔̯◔۶ !!

계속 언급하는 스트림(Stream) 은 무엇을 의미하는ㄱr ?

스트림을 가장 쉽게 이해하려면 수도꼭지를 생각하면 된다. 수도꼭지를 틀면 물이 나오고 수도꼭지를 잠그면 물이 나오지 않는다. A라는 곳에서부터 B라는 곳까지 수도관이 연결되어 있고 A에서 계속 물을 보낸다면 B에서 수도꼭지를 틀때마다 물이 나오게 될 것이다. 여기서 스트림은 A수도관에서 B수도관으로 이동하는 물의 흐름이라고 할 수 있다.

프로그래밍에서는 다음과 같은 것들을 스트림이라고 할 수 있다.

  • 파일 데이터 (파일은 그 시작과 끝이 있는 데이터의 스트림이다.)
  • HTTP 응답 데이터 (브라우저가 요청하고 서버가 응답하는 HTTP 응답 데이터도 스트림이다.)
  • 키보드 입력 (사용자가 키보드로 입력하는 문자열은 스트림이다.)

흠 이건 제가 공부하고 있는 책 점프 투 자바에서 따온 스트림에 대한 설명인데,,

와닿지가 않는 느낌이죠?

 

쪼꼬미는 스트림에 대해 찾고 찾고 찾다가 혼자 어떤 의미를 하는지 만들어 냈어요.

제가 이해하기 쉽도록,!

 

항상 공부할 때는 자신만의 것으로 만들어서 누군가에게 설명을 할 정도가 되어야

내것이 된거니까 꼭 읽고 응~ 넘어가시면 안되고

이해하고 설명하고 내 것으로 만들고 그것을 사용할 수 있을 정도로 만들어야해요!

 

쪼꼬미가 간단하게 이해한 스트림(Stream) !

중간 역할을 하는 스트림!

입출력이 있는 곳이면 어디서든 동작!

 

 

입출력 스트림

스트림은 한 방향으로만 통신할 수 있으므로, 입력과 출력을 동시에 처리할 수는 없습니다.

따라서 스트림은 사용 목적에 따라 입력 스트림과 출력 스트림으로 구분됩니다.

 

자바에서는 java.io 패키지를 통해 InputStream과 OutputStream 클래스를 별도로 제공하고 있습니다.

즉, 자바에서의 스트림 생성이란 이러한 스트림 클래스 타입의 인스턴스를 생성한다는 의미입니다.

 

InputStream 클래스에는 read() 메소드가, OutputStream 클래스에는 write() 메소드가 각각 추상 메소드로 포함되어 있습니다.

사용자는 이 두 메소드를 상황에 맞게 적절히 구현해야만 입출력 스트림을 생성하여 사용할 수 있습니다.

 

아래 링크로 들어가시면 좋은 자료들이 너무 많아요! 참고 하세요!

http://tcpschool.com/java/java_io_stream

 

이번에는 3byte도 입력받을 수 있는 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package scanner;
 
import java.io.InputStream;
 
public class StreamTest {
 
    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        
        InputStream in = System.in;
        
        int a;
        int b;
        int c;
        
        a = in.read();
        b = in.read();
        c = in.read();
        
        
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
 
}
 
cs

 

위의 코드를 아래 코드처럼 간단히 만들 수도 있답니다.!

같은 결과가 나올 거에요.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package scanner;
 
import java.io.InputStream;
 
public class StreamTest02 {
 
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        
        InputStream in = System.in;
        
        byte[] a = new byte[3];
        
        in.read(a); //read 메소드 호출시 입력값으로 전달하면 콘솔 입력이 배열에 저장이 된다.
        
        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
 
    }
 
}
 
 
cs

 

그런데 위의 것은 콘솔 창에 입력 시 아스키 코드로만 나와서

해석하기 너무 불편해요,,

 

문자 값을 그대로 출력하려면 InputStreamReader를 사용하면 된답니다.

안되는게 하나 없는 Java,,

안되는게 좀 있었으면 좋겠다!!!!!!!!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * 
 */
package scanner;
 
import java.io.InputStream;
import java.io.InputStreamReader;
 
/**
 * @author uplus
 *
 */
public class StreamTest03 {
 
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        
        InputStream in = System.in;
        InputStreamReader reader = new InputStreamReader(in); //InputStreamReader 객체를 생성할 때는 생성자의 입력으로 InputStream의 객체가 필요하다.
        char[] a = new char[3]; //InputStreamReader를 사용하면 char 배열을 사용할 수 있다.
        reader.read(a);
        
        System.out.println(a);
        
    }
 
}
 
cs

 

이제는 더 나아가서

사용자가 enter(엔터) 키를 누를 떄까지 입력을 전부 받아들이는 코드를 볼 것이다.

 

여기서는 BufferedReader를 이용하면 가능하다고 한다.!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package scanner;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
 
public class StreamTest04 {
 
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        
        InputStream in = System.in;
        InputStreamReader reader = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(reader); //BufferedReader는 객체 생성시 생성자의 입력값으로 InputStreamReader의 객체가 필요하다.
        
        String a = br.readLine(); //readLine메소드를 이용하면 엔터기를 입력할 때까지 입력했던 문자열 전부를 읽을 수 있게 됩니다.
        System.out.println(a);
 
    }
 
}
 
 
cs

 

오늘 기억할 것!

  • InputStream - byte
  • InputStreamReader - character
  • BufferedReader - String
  • BELATED ARTICLES

    more