Java 공부 기록 1

자바 용어 정리

  • Java SE
    자바의 표준안. 자바라는 언어가 어떤 문법적 구성을 가졌는지 정의한다. 구체적인 소프트웨어가 아니라 그 소프트웨어의 설계도라고 할 수 있다. 소프트웨어에서는 설계도라는 말 대신 명세서(specification)이라는 말을 사용한다.
  • JDK (Java Development Kit)
    Java SE의 표준안에 따라서 만들어진 구체적인 소프트웨어. Java 개발을 하기 위해 필요한 각종 도구들과 JRE가 포함되어있다. 개발자를 위한 자바 버전이라고 할 수 있다.
  • JRE (Java Runtime Environment)
    자바가 실제로 동작하는 데 필요한 JVM, 라이브러리, 각종 파일들이 포함되어있다. 자바로 만들어진 프로그램을 구동하는 데 필요하다. 일반인을 위한 자바 버전이라고 할 수 있다.
  • JVM (Java Virtual Machine)
    자바가 실제로 구동되는 환경이다. 자바로 만들어진 소프트웨어는 JVM이라는 가상화된 환경에서 구동되고, 하드웨어나 OS에 따라서 달라질 수 있는 호환성의 문제는 JVM에서 알아서 해결한다.

숫자와 문자

  • 숫자
    자바에서 따옴표가 없는 숫자는 숫자로 인식한다.
  • 문자
    한 글자를 의미한다. 작은 따옴표(' ')로 감싸야한다.
  • 문자열
    여러 개의 문자가 결합한 것을 의미한다. 큰 따옴표(" ")로 감싸야한다.
    (문자열을 작은 따옴표로 감싸면 에러가 발생한다.)

이스케이프

System.out.print("egoing said "Welcome programing world"");

문자열 안에 큰 따옴표를 넣고싶다고 위와 같이 코드를 작성하면 에러가 발생할 것이다. 이럴 때는 아래와 같이 처리하면 된다.

System.out.println("egoing said \"Welcome programming world\"");

\를 큰 따옴표(") 앞에 위치시키면 큰 따옴표의 문법적 기능을 무시하고 단순 문자로 해석하도록 강요할 수 있다. 이를 이스케이프라고 한다.

줄 바꿈

여러 줄을 출력하고 싶을 때 줄바꿈 기호 (\n)을 사용하면 된다.

System.out.println("HTML\nCSS\nJavaScript\n");

문자의 연산

문자와 문자를 아래와 같이 작성하면 이어져서 출력된다.

System.out.println("생활"+"코딩");

출력 결과 : 생활코딩

데이터 타입

변수의 데이터 타입

  • 정수 자료형

    • byte (1byte) : -128 ~ 127
    • short (2byte) : -32,768 ~ 32,767
    • int (4byte) : -2,147,483,648 ~ 2,147,483,647
    • long (8byte) : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

    잘 모르겠을 때는 int를 사용하면 된다.

  • 실수 자료형

    • float (4byte)
    • double (8byte)

    잘 모르겠을 때는 double를 사용하면 된다.

  • 문자 자료형

    • char (2byte) : 모든 유니코드 문자

상수의 데이터 타입

float a = 2.2;   // 컴파일 에러가 발생한다
double b = 2.2;  // 컴파일 에러가 발생하지 않는다

왜 float에 2.2를 대입했을 때 에러가 발생할까? 2.2 라고 하는 상수의 데이터 타입이 double 이기 때문이다. Java에서 실수인 상수는 기본적으로 데이터 타입이 double이다. float에 값을 대입하기 위해서는 아래와 같이 해야한다.

float a = 2.2F;

비슷한 맥락으로 Java에서 정수는 기본적으로 int 데이터 타입을 가진다. 따라서 long 이라는 데이터 타입에 값을 대입하려면 아래와 같이 해야한다.

long a = 1234L;

다만 byte 형이나 short 형에서는 int 형을 허용하기 때문에 오류가 발생하지 않는다.

조건문

switch문

 System.out.println("switch(1)");
        switch(1){
        case 1:
            System.out.println("one");
        case 2:
            System.out.println("two");
        case 3:
            System.out.println("three");
        }
        // switch(1)
        // one
        // two
        // three
        // 이렇게 출력된다
         
        System.out.println("switch(2)");
        switch(2){
        case 1:
            System.out.println("one");
        case 2:
            System.out.println("two");
        case 3:
            System.out.println("three");
        }
        // switch(2)
        // two
        // three
        // 이렇게 출력된다
         
        System.out.println("switch(3)");
        switch(3){
        case 1:
            System.out.println("one");
        case 2:
            System.out.println("two");
        case 3:
            System.out.println("three");
        }
        // switch(3)
        // three
        // 이렇게 출력된다

논리 연산자

  • && (and)

  • || (or)

  • ! (역전)
    boolean의 값을 역전시킨다.
    예시) !true => false
    예시) !false => true

반복문

while문

while(조건){
    반복 실행 영역
}

for문

for(초기화; 종료조건; 반복실행){
    반복적으로 실행될 구문
}
  • 초기화 : 반복문이 실행될 때 1회 실행된다.
  • 종료조건 : 초기화가 실행된 후에 종료조건이 실행된다. 종료조건의 값이 false일 때까지 반복문의 중괄호 구간의 코드가 반복 실행된다.
  • 중괄호 구간의 실행이 끝나면 반복 실행이 실행된다. 일반적으로 이 곳에 i++와 같이 변수를 증가시키는 로직이 위치하고, 이것이 실행된 후에 종료조건이 실행된다. 종료조건이 false가 될 때까지 이 과정이 반복된다.

반복문의 제어

break

반복문 내에서 break가 실행되면 그 즉시 반복문이 완전히 종료된다.

continue

반복문 내에서 continue가 실행되면 그 아래의 코드를 실행하지 않고, 바로 다음 반복을 진행한다.

for (int i = 0; i < 10; i++) {
    if (i == 5)
        continue;
    System.out.println(i);
    }

예를 들어 위와 같은 프로그램을 실행시키면 1,2,3,4,6,7,8,9 가 출력된다.

배열

  • 배열 생성하기
String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" };

classGroup는 배열이 담길 변수의 이름이다.
String[]은 classGroup에 담을 배열에 담길 데이터의 타입이 문자열의 배열이라는 의미다. 배열을 선언할 때는 데이터 타입 뒤에 []를 붙여야 한다. []가 없다면 classGroup는 배열이 아니라 문자열 데이터 타입을 갖는 변수가 된다. 배열에 소속될 데이터들은 중괄호 안에 위치한다. 그리고 각각의 데이터들은 쉼표로 구분된다.

  • 배열에서 값 꺼내오기
String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" };
System.out.println(classGroup[0]);
System.out.println(classGroup[1]);
System.out.println(classGroup[2]);
System.out.println(classGroup[3]);

최진혁, 최유빈, 한이람, 이고잉이 출력된다.

  • 배열의 길이 보기
String[] classGroup = new String[4];
System.out.println(classGroup.length);

4가 출력된다.

  • 배열을 정의하는 또 다른 방법
String[] classGroup = new String[4];
classGroup[0] = "최진혁";
classGroup[1] = "최유빈";
classGroup[2] = "한이람";
classGroup[3] = "이고잉";
  • for-each
 String[] members = { "최진혁", "최유빈", "한이람" };
        for (String e : members) {
            System.out.println(e);

최진혁, 최유빈, 한이람이 출력된다.

메소드

메소드는 코드를 재사용할 수 있게 해준다.

  • 메소드의 형식
public static void main(String[] args) {
    return
}
  • 메소드의 정의와 호출
public static void numbering() {
        int i = 0;
        while (i < 10) {
            System.out.println(i);
            i++;
        }
    }
// numbering이라는 메소드를 정의했다.
 
    public static void main(String[] args) {
        numbering(); // 위의서 정의한 numbering 메소드를 호출한다.
    }
  • main 메소드
    main 메소드는 규칙이다. 만들고 싶은 프로그램이 있다면 반드시
    public static void main(String[] args)가 이끄는 중괄호 안에 실행되기를 기대하는 로직을 위치시켜야 한다. 이것은 약속이기 때문에 지켜야 한다. 그렇게 코드를 작성하면 자바를 실행할 때 자바는 내가 작성한 main 메소드를 실행하게 되는 것이다. 내가 main 메소드를 작성하고, 자바는 main 메소드를 실행하는 관계라고 할 수 있다.

  • 메소드의 입력과 출력
    메소드에서의 입력 값은 매개변수를 통해서 이루어진다.

public static void numbering(int limit) {
        int i = 0;
        while (i < limit) {
            System.out.println(i);
            i++;
        }
    }
 
    public static void main(String[] args) {
        numbering(5);

이 코드는 0부터 4까지 출력한다. 0부터 10까지 출력하고 싶다면 numbering(5) 대신 numbering(11)을 호출하면 된다. 함수를 호출할 때 입력한 값이 limit라는 변수에 저장되어 함수의 로직에 이용되는 것이다. 이 때 limit을 매개변수라고 한다. 그리고 위의 예시에서 전달된 값 5를 '인자'라고 부른다.

복수의 인자를 사용할 수도 있다.

public static void numbering(int init, int limit) {
        int i = init;
        while (i < limit) {
            System.out.println(i);
            i++;
        }
    }
 
    public static void main(String[] args) {
        numbering(1, 5);
    }

이 경우 1에서 4까지 출력된다.

  • return
    메소드 내에서 사용한 return은 return 뒤에 따라나오는 값을 메소드의 결과로 반환한다. 동시에 메소드를 종료시킨다. return을 사용하기 위해서는 메소드를 정의할 때 메소드 이름 옆에 반환하고자 하는 값의 데이터 형식을 명시해주어야 한다. (반환 값이 없다면 void를 적어준다.)

좋은 웹페이지 즐겨찾기