printf 와 지시자



자바에서는 콘솔화면에 출력 할 때 println을 주로 사용한다. 하지만 printf를 사용하면 데이터를 좀 더 다양하게 출력 할 수 있는 장점이 있다. printf는 C를 해봤던 사람이면 익숙한 함수이다. C의 printf와 비슷한 자바의 printf를 사용 법을 알아보자.


 

지시자 설명



우선 지시자에 대해 알아보도록 해보겠다.


 지시자

 설명

 %b

 불리언

 %d

 10진수

 %o

  8진수

 %x, %X

 16진수

 %f

 실수형 10진수

 %e, %E  지수형태표현
 %c 문자
 %s 문자열
 %n

 개행


[ println VS printf ]


println을 이용한 출력

 String s = "hello"

 System.out.println( "test = [" + s + "]" );


printf를 이용한 출력

 String s = "hello"

 System.out.printf( "test = [%s]%n",s); 


[예제]

public class Printf {

public static void main(String[] args) {

//boolean 출력 지시자

boolean isTrue = true;

System.out.printf("isTrue[%b]%n",isTrue);

//10진수 출력 지시자

int number = 10;

System.out.printf("isTrue[%d]%n",number);

//문자 출력 지시자

char c = 'A';

System.out.printf("c[%c]%n",c);

//8진수 출력 지시자

int oNum = 010;

System.out.printf("oNum[%o],[%d]%n",oNum, oNum);

//16진수 출력 지시자

int hNum = 0x10;

System.out.printf("hNum[%x],[%d]%n",hNum, hNum);

//문자열 출력 지시자

    String msg = "hello world";

System.out.printf("msg[%s]%n",msg);

}

}



반응형

'프로그램 > Java' 카테고리의 다른 글

[java] Random 사용법  (0) 2018.05.24
[java] sleep 사용법  (0) 2018.05.23
[java] ServerSocket, Socket  (0) 2018.05.21
[java] 다중 반복문 탈출 방법  (0) 2018.05.21
[java] do~while문 사용법  (0) 2017.12.15

ServerSocket, Socket



ServerSocket은 java에서 서버 프로그램을 개발할 때 쓰이는 클래스이다. 해당 클래스를 이용해서 서버를 개발 하는 방법에 대해 알아보겠다. Socket 클래스는 client에서 서버로 접속하거나 Server에서 accept 하는데 필요한 클래스다. 이 설명을 이해 하려면 TCP/IP 접속 송수신 과정이해가 선행 되어야 한다.


 

소켓 송수신 과정 설명



ServerSocket, Socket 클래스를 이용한 서버-클라이언트 프로그램을 이해하려면 다음과 같이 TCP/IP 송수신 과정을 이해 해야한다.


 서버

 방향

 클라이언트

 클라이언트의 요청을 받기 위한 준비를 한다.(ServerSocket)

 

 

 클라이언트의 요청을 받아 들인다. (accept)

 <-

 서버에 접속 요청을 한다. (Socket)

 클라이언트가 보낸 데이터를 출력 한다. (BufferedReader)

 <-

 서버에 메시지를 보낸다. ( BufferedWriter )

 클라이언트에 메시지를 보낸다. ( BufferedWriter )

 ->

 서버가 보낸 메시지를 출력한다. ( BufferedReader )

 종료 한다. ( socket.close() )

 

 종료 한다. ( socket.close() )



[서버]

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;


public class Server {

    public static void main(String[] args ) {

        try {

            //서버 생성

            ServerSocket serverSocket = new ServerSocket(9000);

            //client 접속 accept

            Socket socket = serverSocket.accept();

            

            //client가 보낸 데이터 출력

            BufferedReader bufReader =

              new BufferedReader( new InputStreamReader( socket.getInputStream()));

            String message = bufReader.readLine();

            System.out.println("Message : " + message );

            

            //client에 데이터 전송

            BufferedWriter bufWriter = 

              new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()));

            bufWriter.write("hello world");

            bufWriter.newLine();

            bufWriter.flush();

            

            socket.close();

            serverSocket.close();

            bufReader.close();

            bufWriter.close();

            

          }

          catch( Exception e ){

            e.printStackTrace();

          }

            

     }

}

  


9000번 port로 설정해 서버를 생성

 ServerSocket serverSocket = new ServerSocket(9000);


클라이언트 요청을 받아 들인다.

 Socket socket = serverSocket.accept();


[클라이언트]

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;


public class Client {

    public static void main(String[] args ) {

        try {

            //서버 접속

            Socket socket = new Socket("127.0.0.1", 9000);

            

            //Server에 보낼 데이터 

            BufferedWriter bufWriter = 

              new BufferedWriter( new OutputStreamWriter( socket.getOutputStream()));

            bufWriter.write("hello world");

            bufWriter.newLine();

            bufWriter.flush();

            

            //Server가 보낸 데이터 출력

            BufferedReader bufReader =

              new BufferedReader( new InputStreamReader( socket.getInputStream()));

            String message = bufReader.readLine();

            System.out.println("Message : " + message );

            

            socket.close();

            bufReader.close();

            bufWriter.close();

          }

          catch( Exception e ){

            e.printStackTrace();

          }

            

          }

}



127.0.0.1 (localhost) 9000번 서버에 접속

 Socket socket = new Socket("127.0.0.1", 9000);



소켓에서 데이터를 읽을 때 

( 예제 기준으로 서버인 경우 클라이언트의 요청을 받는다. 반대로 클라이언트는 서버의 응답을 받는다. )

BufferedReader bufReader =

              new BufferedReader( new InputStreamReader( socket.getInputStream())));


소켓에서 데이터를 쓸 때 

( 예제 기준으로 서버인 경우 클라이언트에 응답을 한다. 반대로 클라이언트는 서버의 요청을 한다. )

 BufferedWriter bufWriter = 

              new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())));




반응형

'프로그램 > Java' 카테고리의 다른 글

[java] sleep 사용법  (0) 2018.05.23
[java] printf 와 지시자  (0) 2018.05.22
[java] 다중 반복문 탈출 방법  (0) 2018.05.21
[java] do~while문 사용법  (0) 2017.12.15
[java] while문 사용법  (0) 2017.12.11

다중 반복문 탈출



프로그램 작성 하는 중 2중 혹은 그 이상 다중으로 반복문( while, for 등 )을 사용하는 경우가 있다. 여러 반복문을 탈출 하기 위해서는 각 반복문 마다 break를 해야만 빠져나올 수 있어 번거롭고 코드 보기도 복잡하다. Java에서 다중 반복문을 탈출 하는 방법을 알아보자.

 

구구단 예문으로 2중 for문 탈출 예제



아래와 같이 구구단을 출력하는 프로그램이 있다.


public class calcMath{

public static void main(String[] args){

             for( int i = 2; i < 10; i++ ){

                for( int j = 2; j < 10; j++){

                   System.out.println( i + "X" + j + "=" + (i*j));                   

                }

             }

}

}


여기서 2번째 for 문에서 한 번에 빠져 나가는 방법을 알아보자.


public class calcMath{

public static void main(String[] args){

             forout : 

             for( int i = 2; i < 10; i++ ){

                for( int j = 2; j < 10; j++){

                   if( i == 3 )

                      break forout;

                   System.out.println( i + "X" + j + "=" + (i*j));                   

                }

             }

}

}



위와 같이 반복문이 실행 되기 전에 반복문 이름을 forout 이라고 짓는다. 

그리고 2 번 째 for문에서 break 반복문 명인 forout을 지정해주면 해당 반복문을 빠져 나올 수 있다.

 반복문 명 지정 :

  for( ... ){

     for( ... ) {

         break 반복문 명;

     }

  }



반응형

'프로그램 > Java' 카테고리의 다른 글

[java] printf 와 지시자  (0) 2018.05.22
[java] ServerSocket, Socket  (0) 2018.05.21
[java] do~while문 사용법  (0) 2017.12.15
[java] while문 사용법  (0) 2017.12.11
[java] switch문 사용법  (0) 2017.12.10

do~while문 사용법



do~while문은 while문과 비교해서 조건과 상관 없이 무조건 한 번 작업을 수행한다.

그 다음 조건이 참(true)이면 반복해서 작업을 수행 한다.



do~while 사용법


사용방법은 다음과 같다.

 do

 {

      수행할 작업

 }while( 조건문 );


do~while문은 다음과 같이 쓸 수 있다.


int i = 0;


do

{

     System.out.println("Working...i["+i+"]");

      i++;

 }while( i < 5 )

 System.out.println("END");



do~while문 부분 설명

  do

 조건과 상관없이 한 번 실행 한다.

  i++; i가 1 증가한다. 증가 후 다시 while로 돌아가 i < 5인지 확인 하고 참이면 다시 수행한다.

  while( i < 5)

 i가 5보다 작으면 참이다.  이 조건을 만족하면 while 안에 작업은 반복적으로 수행한다.



while문의 수행 결과

 i값

 출력 결과

 설명

 0

 Working...i[0]

  i는 5보다 작기 때문에 Working...i[0]를 출력하고 i에 1을 증가시킨다.

 1

 Working...i[1]

  i는 5보다 작기 때문에 Working...i[1]를 출력하고 i에 1을 증가시킨다.

 ....

 

 5

 END

  5일 때 while문을 벗어나며 END 문을 출력한다.





while, if ... 그리고 break


위의 예문은 조건이 참인동안 반복적으로 수행한다.

하지만 중간에 while문을 빠져 나와야 하는 경우는 어떻게 해야 될까?

우선 break를 만나면 while문을 빠져 나오게 할 수 있다.

이 원리를 이용해 특정 조건을 검사하는 if문을 활용하여 while문을 빠져나와보자



int i = 0;


do

{

     System.out.println("Working...i["+i+"]");

      i++;


     if( i == 3 )

     {

       System.out.println("out of while loop");          

         break;

     }

 }while( i < 5 )

 System.out.println("END");


while문 부분 설명

  do

 조건과 상관없이 한 번 실행 한다.

  i++;

 i가 1 증가한다. 증가 후 다시 while로 돌아가 i < 10인지 확인 하고 참이면 다시 수행한다.

 if( i == 3 )

 i가 3이면 if 블록 안 작업을 수행 한다.

 break;

 while문을 빠져 나온다. 

 while( i < 10 )

 i가 10보다 작으면 참이다.  이 조건을 만족하면 while 안에 작업은 반복적으로 수행한다.



while문의 수행 결과

 i값

 출력 결과

 설명

 0

 Working...i[0]

  i는 5보다 작기 때문에 Working...i[0]를 출력하고 i에 1을 증가시킨다.

 1

 Working...i[1]

  i는 5보다 작기 때문에 Working...i[1]를 출력하고 i에 1을 증가시킨다.

 2

 Working...i[2]  i는 5보다 작기 때문에 Working...i[2]를 출력하고 i에 1을 증가시킨다.

 3

  out of while loop

  END

  3이 되면 if문 블록 안 작업을 수행 하게 된다.

  break를 만나 while문을 빠져 나오기 때문에 END를 출력한다.



반응형

'프로그램 > Java' 카테고리의 다른 글

[java] ServerSocket, Socket  (0) 2018.05.21
[java] 다중 반복문 탈출 방법  (0) 2018.05.21
[java] while문 사용법  (0) 2017.12.11
[java] switch문 사용법  (0) 2017.12.10
[java] for each문 사용법  (0) 2017.12.09

+ Recent posts