Welcome to

My Java Develop Space

Java portfolio from H.Y.Song Welcome to my development space!

All posts

[6] for 반복문


글을 시작하며
간혹 같은 스크립트나 같은 출력 명령어를 여러번 반복시켜야할 때가 종종 있다. 하지만 그렇다고 모든 반복사항을 모두 쓸 수는 없는 노릇이다. 그래서 있는게 반복문, 즉 for 문이다.

용도
같은 명령어들을 여러번 작동시킴.

문법
for([정수형 변수 유형] [정수형 변수 이름] = [초기화 값]; [정수형 변수 이름] [비교 연산자] [비교할 값]; 증가 공식){
[명령어]
}

예제
public class EX{
    public static void main(String[]args){
        for (int i = 0; i == 10; i++){
            System.out.println("Hello World!");
            System.out.println("Counted: " + i);
        }
    }


}


출력 결과: 
Hello World!
Counted: 0
Hello World!

Counted: 1
Hello World!

Counted: 2
Hello World!

Counted: 3
Hello World!

Counted: 4
Hello World!

Counted: 5
Hello World!

Counted: 6
Hello World!

Counted: 7
Hello World!

Counted: 8
Hello World!

Counted: 9
Hello World!

Counted: 10


설명
위의 예제는 Hello World! 와 Counted: [카운트수] 를 출력하는 예제이다. 여기서 변수 i 는 카운터 변수이다. for 문이 한번 작동할때마다 i++ 부분에서 변수 i 가 계속 1 씩 증가하므로써,  i==10 이라는 조건에 충족을 하면 작동을 그만한다.
이 외에도 break; 라는 코드로 for 문의 조건을 충족하지 않았음에도 for 문을 빠져나올 수 있다.


[5] if 조건문

글을 시작하며
 간혹 스크립트를 작성하면서 조건을 걸고싶어질때가 있다. 예를 들면 로그인처럼 아이디와 비번이 있으면 그 안에 있는 컨텐츠를 볼 수 있다던지... 특정한 숫자를 입력받으면 그마다 다른 명령을 수행한다던지.. 이번에는 그것에 관해서 써 보려 한다.
용도
 특정 저장된 데이터를 불러들임, 판단 후 조건에 대입하여 특정 명령을 수행한다.
문법
숫자일 경우
if(데이터==원하는 데이터 값){
}
문자일 경우
if(데이터.equals(데이터 또는 "데이터 값")){
}
설명
 예를 들어 i 라는 int 의 메모리가 있다. i 에는 3이라는 값이 있고, 조건문은 5를 요구한다. 조건문이 실행이 되면 i 메모리에 있는 값을 가져와 조건문이 요구하는 값과 비교하여 조건을 충족하는 스크립트를 실행하게 된다. 조건문이 요구하는 값은 다른 메모리 값이 될 수도 있다.

 - 연산자
== : 같으면
<= : 같거나 앞에있는 값이 뒤에있는 값보다 작으면
>= : 같거나 뒤에있는 값이 앞에있는 값보다 작으면
< : 뒤에 있는 값이 앞에있는 값보다 크면
> : 앞에 있는 값이 뒤에있는 값보다 크면

예제1
public class EX{
    public static void main(String[]args){
        int i = 30
        if(i==30){
            System.out.println("i=30");
        }
    }
}



출력 결과:
i=30 


그런데 만약 입력된 데이터 값이 요구된 값과 다르다면? 어떻게 해야할까? 그리하여 쓰이는게 else 와 else if 이다.

else 문
예제2
public class EX{
    public static void main(String[]args){
        int i = 40
        if(i==30){
            System.out.println("i=30");
        }else{
            System.out.println("i=Not 30");
        }
    }
}




출력 결과:
i=Not 30


else 문은 개념적으로 1 아니면 0 이다. 맞느냐 틀리냐만 다른건데, else if 는 하나 이상의 조건을 넣을 수 있다.

예제3
public class EX{
    public static void main(String[]args){
        int i = 40
        if(i==30){
            System.out.println("i=30");
        }else if(i<30){
            System.out.println("i<30");
        }else if(i>30){
            System.out.println("i>30");

        }
    }
}





출력 결과:
i>30

이렇게 여러가지 조건을 넣을 수 있다. if 를 두번이나 세번 쓸 수 있지만, 필자는 컴퓨터를 위해 그것보다는 else if 를 추천한다. if 를 여러번 쓰면 컴퓨터는 모든 if 문들을 거쳐가게 된다. 그러나 else if 문은 하나만 충족하는게 있다면 그것만 출력/수행하게 된다.


[추천] 자바 에디터 추천


이번에는 자바 에디터 2개를 추천한다. 필자는 맥을 사용하지만 윈도우의 사용자도 필자가 사용하는 모든 에디터를 사용할 수 있다. 지금 추천하는것들은 모두 무료이며, 리뷰는 현재 2017년 03월 31일 오후 10시 50분 기준이다. 이 모든것들은 필자의 의견이니, 너무 객관적으로 받아들이진 말라.

ECLIPSE

이 Eclipse 라는 에디터는 eclipse.org 라는 조직에서 만든 자바 에디터이다. 자바 에디터 하면 떠오르는 1번째 툴인 이클립스는 거의 전세계 사람들이 사용하며, 역시 자바 에디터의 대명사이다. 현재 NEON3 가 최신 버전이다.

장점
- 모든 사람들이 사용하여 만약 문제가 생길시 따라 고치기가 매우 쉽다.
- 워크스페이스를 마음대로 왔다갔다 이동 할 수 있다.
- 워크스페이스에는 그 워크스페이스에서 썼던 설정이 그대로 남아있다.
- 이전 워크스페이스를 복원하기가 쉽다.

단점
- 코드를 길게 쓸 경우 { 와 }의 페어를 알 수 가 없다.
- 다크모드의 경우 색갈이 너무 튄다.
- 스크립트의 오류를 발견시 자세한 설명을 해주지 않는다.
- 자동으로 포맷을 고쳐주지 않는다.
- 맥의 기준으로 한글을 타이핑 하다가 커서를 움직여주면 마지막에 친 한글이 사라진다.










이 툴은 Android Studio 하고 같게 생긴 프로그램이다. Android Studio 의 UI 도 여기서 가져왔다. Jetbrain 이라는 회사에서 만든 프로그램이다. Android Studio 를 많이 쓴 사람이라면 이게 더 익숙할수도 있다. 현재 2017.1 버전이 최신 버전이고, Community Edition 은 무료이지만 Ultimate 버전은 유료이다.

장점
- 코드를 길게 쓸 경우 { 와 }의 페어를 알 수 있다.
- 스크립트가 끝났을 경우 Process finished with exit code ~ 라는 메세지를 띄워줌으로서 프로세스가 완료되었는지 확실하게 알 수 있다.
- 맥의 기준으로 한글을 타이핑 하다가 중간에 없어지는 일이 없다.
- 폰트가 좋다.

단점
- 테스트런 (컴파일) 을 할 시 이클립스와 비교하여 느리다.
- 오류가 날 시 오류 해결법을 잘 알 수가 없다.
- 워크스페이스 이동이 이클립스와 비교하여 어렵다.
- 한 워크스페이스 내에서 다중 프로젝트를 생성할 수 없다.



다들 모두 장단점이 있다. 어느것이 좋은지 판단은 독자분들에게 맏기겠다. 필자는 개인적으로 긴 코드를 쓸 때 IntelliJ Idea 를 추천하지만 짧은것을 쓸 때는 Eclipse 를 추천한다.

[4] 입력 받기



용도: 사용자가 키보드로 입력한 데이터를 받아서 저장한다.
문법: (여러줄)
설명: import java.util.Scanner; 을 이용하여 java.util 에 있는 Scanner 클래스를 불러들인다. 그리고, Scanner 메서드 이름 = new Scanner(System.in); 으로 메서드를 생성한다. 그리고 (데이터 타입) (할당 이름) = (메서드 이름).next(데이터 타입)(); 으로 입력을 받는다. 필자는 메서드 이름을 주로 input 으로 하여 Scanner input = new Scanner(System.in); 으로 쓴다. 
                 int 는 int (할당 이름) = input.nextInt();
        double 은 double (할당 이름) = input.nextDouble();
        String 은 String (할당 이름) = input.next();
        String 은 String (할당 이름) = input.nextLine(); 
   *차이점: next(); 은 스페이스바를 문자 처리 하지 않고 스페이스 뒤의 문자는 무시해 버리지만, nextLine(); 은 스페이스바를 포함한 모든 문자열을 저장한다. 필자는 주로 nextLine(); 을 이용한다.
예제: 
import java.util.Scanner;
public class EX{
    public static void main(String[]args){
        Scanner input = new Scanner(System.in);
        System.out.println("숫자데이터를 입력하세요");
        int numdat = input.nextInt();
        System.out.println("숫자데이터를 입력하세요");
        String sdat = input.nextLine();
        System.out.println("저장된 데이터: " + numdat + ", " + sdat);
    }
}

오류: 그런데 이렇게 작성을 하였을때 String에서 받는 데이터는 아무것도 없게 된다. 이유는 int 에서 받은 엔터를 문자처리 하여 sdat 공간에 넣어버리는 것이다. 그렇기 때문에 제대로 된 입력을 받기 위해서는 Integer 라는 클래스 메서드를 이용해야 한다. 새로운 예제는 이러하다: 

import java.util.Scanner;
public class EX{
    public static void main(String[]args){
        Scanner input = new Scanner(System.in);
        System.out.println("숫자데이터를 입력하세요");
        String ndat = input.nextLine();
        int numdat = Integer.parseInt(ndat);
        System.out.println("문자데이터를 입력하세요");
        String sdat = input.nextLine();
        System.out.println("저장된 데이터: " + numdat + ", " + sdat);
    }
}

이렇게 하면 Integer.parseIntndat 의 숫자값을 추출해 내어 numdat 에 저장하게 된다. 물론 엔터는 문자처리를 하지 않는다.


출력 결과: 
숫자데이터를 입력하세요
123
문자데이터를 입력하세요
abcd
저장된 데이터: 123, abcd

Process finished with exit code 0

[3] 데이터 메모리 값


용도: 특정한 데이터 타입을 메모리에 저장한다.
문법: (데이터 타입) (이름)=(데이터 값);
설명: 데이터 타입은 모두 다르고 할당되는 용량도 다르다.
  데이터 타입:
  byte        | 정수, 2바이트
  int           | 정수, 4바이트
  long        | 정수, 8바이트
  float        | 실수, 4바이트
  double    | 실수, 8바이트
  char        | 문자 (숫자를 입력하면 A
  String     | 문자열 (기본 데이터 타입이 아님)

  필자의 사용 빈도:
  정수: int
  실수: double
  문자열: String

  추가 설명:
  System.out.print & ln & f 에서는 모두 int, double, string 만 할당이 된다. 그러므로 다른 데이터타입을 입력하려면 값 뒤에 데이터타입 이니셜을 따 붙여주면 된다. ex) System.out.println(999999999999l);

예제:
public class EX{
    public static void main(String[]args){
    int i = 10;
    double d = 100000;
    String s = "String value";
    char c = 'a';
    System.out.println("저장된 데이터를 불러옵니다. \n" + i + "\n" + d + "\n" + s + "\n" + c);
    }

}

출력 결과:
저장된 데이터를 불러옵니다.
10
100000
String value
a


[2] 자바 출력하기


1. 자바의 문자열 출력은 String 이라는 클래스로부터 나온다.
2. 우리가 굳이 String을 작성할 필요는 없다.
3. 자바의 문자열 출력 명령어는 System 이라는 클래스에 기반을 둔다.
System.out.print("");     
System.out.println("");  
System.out.printf("",""); 
4. 이것들은 모두 문자열을 출력하는 명령줄이다.
5. 작성방법:
System.out.print("출력할 내용");         
System.out.println("출력할 내용");      
System.out.printf("%s","출력할 내용");

System.out.print("출력할" + "내용");           
System.out.println("출력할 " + "내용");       
System.out.printf("%s%s","출력할","내용");

System.out.print("출력할 내용");         
System.out.println("출력할 내용");      
System.out.printf("%s","출력할 내용");

6. 속성
\n: 엔터키 역할을 한다. 이것 대신에 System.out.println(); 을 적어도 되지만 필자는 비추다. print문에 "" 사이에 넣어야 된다.
\t: 탭 키 역할을 한다. 필자는 실제로 작성중 탭키보다 이것을 사용하는것을 추천한다. 가끔가다 탭을 친 만큼의 공간이 깨지기도 한다. print문에 "" 사이에 넣어야 된다.

%s: 문자열
%d: 숫자열
%f: 숫자

7. 추천
필자는 주로 System.out.println();을 주로 쓴다. 굳이 \n 을 쓰거나 printf 처럼 %~ 를 쓰지 않아도 되어서 개인적으로 편하다... 하지만 편리성의 결정은 각자의 나름이다.

예제:
public class EX{                                         
    public class void main(String[]args){     
        System.out.print("출력할 내용");        
        System.out.println("출력할 내용");     
        System.out.print("%s","출력할 내용");
    }                                                             
}                                                                 

출력 결과:
출력할 내용
출력할 내용
출력할 내용

[1] 주석 달기


1. 주석은 스크립트 내의 메모같은 역할을 한다.
2. 주석이 달린 문자는 자바가 알아서 건너 뛴다.
3. 한줄만 할 수 도 있고, 여러줄도 가능하다.
4. 작성법:
// text here
또는
/*text
here*/
5. 예제:
public class EX1{
    public static void main(String[]args){
        //여긴 주석이다. 알아서 건너뛴다. (한줄만 읽는 표시는 // 이다.)
        /*여긴 주석이다.
           알아서 건너 뛴다.
           (여러줄 읽는 표시는 /* (내용) */ 이다)*/
    }
}

출력 내용: