코학다식

Java 시작하기 :: 자바 프로그래밍 기초(2) 본문

Programming/Java

Java 시작하기 :: 자바 프로그래밍 기초(2)

copeng 2019. 9. 10. 21:24

Java 시작하기 (3)

자바 프로그래밍 기초(2)

 

 

  1. 변수들

 

  • 자바의 기본 문법은 C/C++과 매우 유사하다.
  • 변수 정의

 

package FirstProgram;

import java.util.Random;

public class VariableDefinition {
    public static void main(String[] args){
        int one;
        int two = 2; // with initialization
        int three = 3, four; // multiple definitions in one line
        Random generator = new Random(); // definition + class instantiation
    }
}

 

  • 변수 이름
    • 문자로 시작해야 한다.
    • 문자, 숫자, 그리고 $를 포함할 수 있다.
    • case-sensitive하다.
  • 변수 초기화
    • 사용하기 전에 변수는 초기화되어야 한다.
    • 초기화되지 않은 변수를 사용한 코드는 잘못된 것이다.
  • 상수(Constants)
    • 상수를 선언하기 위해서 final 이라는 키워드를 사용한다.
    • final로 선언된 변수는 수정할 수 없다.
    • 상수인 변수는 관례적으로 영어 대문자를 사용하여 이름지어야 한다.

 

 

  1. 산술 연산자

 

  • 산술 연산자 또한 C/C++과 유사하다.
  • Assignment (=)
    • x = expression
  • 기초 산술 연산자 (+, -, *, /, %)
    • 정수를 나누면 결과도 정수가 된다. 만약 부동소수점 숫자로 된 결과를 원한다면 적어도 하나의 피연산자는 부동소수점 타입이어야 한다.

 

  • 단항 연산자
    • n++ // increment n
    • n-- // decrement n
  • n++++n의 차이
    • n++는 해당 라인의 값을 구하고 n을 증가시킨다.
    • ++n은 n을 증가시키고 해당 라인의 값을 구한다.

 

  • Mathematics 메서드
    • Math.pow(x, y): x의 y승을 리턴
    • Math.sqrt(x): x의 제곱근
    • Math.min
    • Math.max
    • Math.PI
    • Math.E
    • Math.random(): [0, 1) 범위의 랜덤한 숫자를 리턴
    • 이 메서드들은 static 메서드라고 불린다. (차후 설명)

 

  • 만약 산술 연산자의 두 피연산자가 다른 타입을 가지고 있다면, 두 변수의 타입을 일치시키기 위해 자동으로 타입 변환이 일어난다.
  • 그 순서는 다음과 같다.
    • 둘 중 한 피연산자가 double이라면, 다른 피연산자가 double이 된다.
    • 둘 중 한 피연산자가 float라면, 다른 피연산자가 float가 된다.
    • 둘 중 한 피연산자가 long이라면, 다른 피연산자가 long이 된다.
    • 그렇지 않다면 두 피연산자는 int 타입이 된다.
  • 프로그래머는 변수의 타입을 명시적으로 바꿀 수 있다.
    • double x = 3.75int n = (int) x
  • Casting(타입 명시적으로 바꾸기)을 이용한 타입 변환
    • 자동: byte → short → int → long → float → double
    • 오른쪽 데이터를 왼쪽으로 바꿀 때는 cast operator를 사용해야 한다.
    • 참고글
  • 산술 연산자와 데이터 타입
    • int → long → float → double
    • 왼쪽에서 오른쪽으로 변환이 일어난다.
    • 정수 타입(int, long) 사이의 나눗셈은 정수이다.

 

  • 관계 연산자와 논리 연산자
    • == (equal)
    • != (not equal)
    • < (less than)
    • > (greater than)
    • <= (less than or equal)
    • >= (greater than or equal)
    • 이 연산자들은 true 혹은 false를 리턴한다.
    • 관계 연산자는 이들과 함께 쓰일 수 있다.
      • && (logical AND)
      • || (logical OR)
      • ! (logical NOT)
    • 만약 여러 명제가 &&을 사용해서 결합되어 있고 첫 번째 명제가 false라면 두 번째 명제는 계산되지 않는다.
    • 만약 여러 명제가 ||을 사용해서 결합되어 있고 첫 번째 명제가 true라면 두 번째 명제는 계산되지 않는다.
  • 대입 연산자

    • +=, -=, *=, /=, %=

      • j += 5 // j ← j+5
    • 비트 연산자

      • <<= 한 비트를 왼쪽으로 이동

      • =>> 한 비트를 오른쪽으로 이동

      • |= bit OR

      • &= bit AND

      • ^= bit XOR

  • 조건부 연산자
    • time < 12 ? "am" : "pm"
    • 만약 time이 12보다 작으면 이 문장의 결과는 "am"이고, 그렇지 않으면 "pm"이다.
  • bit-wise 연산자와 shift 연산자
    • op1 & op2: AND 연산자가 두 비트들을 비교하고 만약 두 비트가 모두 1이면 1을, 그렇지 않으면 0을 리턴한다.
    • op1 | op2: OR 연산자가 두 비트들을 비교하고 만약 두 비트가 모두 0이면 0을, 아니면 1을 리턴한다.
    • op1 ^ op2: EXCLUSIVE-OR 연산자가 두 비트들을 비교하고 만약 두 비트가 다르면 1을, 아니면 0을 리턴한다.
    • ~op: 피연산자의 모든 비트들을 바꾼다.
    • op1 >> op2: SHIFT RIGHT 연산자는 비트들을 오른쪽으로 이동시키고, 가장 오른쪽의 비트를 버린 뒤 가장 왼쪽의 비트를 0으로 할당한다. 오른쪽으로의 각 이동은 op1을 반으로 나눈다.
    • op1 << op2: SHIFT LEFT 연산자는 비트들을 왼쪽으로 이동시키고, 가장 왼쪽의 비트를 버린 뒤 가장 오른쪽의 비트를 0으로 할당한다. 오른쪽으로의 각 이동은 op1을 두 배로 만든다.

 

  • 연산자 우선순위

 

public class LEC {
    public static void main(String[] args) {
        int x = 1, y = 2, z;
         z = x + y*2 - ++x + (y += 3);
    }
}

 

  • 위 코드에서 z의 값은 무엇일까?
    • 자바는 계산할 때 왼쪽에서 오른쪽으로 진행한다.
    • 진행하면서 연산자를 만날 때마다 연산자의 우선순위를 비교해서, 우선순위가 높은 것부터 계산한다.
    • 연산자를 만났다고 바로 계산되는 게 아니라, 그대로 진행하다 다른 연산자와 만났을 때 우선순위를 비교해 계산된다.
    • 따라서 z의 값을 얻는 과정은 다음과 같이 이루어진다.
      • 처음 +를 만났고, 바로 *를 만난다. *의 우선순위가 높으므로 y*2(= 4)가 먼저 계산된다.
      • 이후 -를 만나는데, +-의 우선순위가 같으므로 x + y*2가 계산된다. (= 5)
      • 이제 -를 만나고 이후에 ++를 만난다. ++의 우선순위가 높으므로 먼저 계산되어 x는 2가 된다.
      • +를 만나는데 -+의 우선순위가 같으므로 -가 계산된다. x + y*2 - ++x까지가 계산되어 3이 된다.
      • 괄호는 우선순위가 가장 높으므로 먼저 계산된다. 괄호 안의 식 y += 3이 계산되어 y는 5가 되고, 지금까지 계산된 값과 더해져 계산의 최종 값은 8이 된다.

 

 

  1. Strings

 

  • 스트링은 문자들의 시퀀스다. 자바 라이브러리는 String이라는 클래스를 제공한다. 이 클래스는 Primitive type은 아니다. (primitive type은 소문자로만 구성)

    편의상 클래스 String을 말할 때는 String이라고 표기하고, 문자들의 시퀀스를 의미하는 string은 스트링으로 표기한다.

  • 두 스트링 변수들은 +로 결합될 수 있다.

  • 만약 String과 다른 타입의 변수를 결합하면, 그 변수는 String이 된다.

 

  • Static 메서드
    • join: 구분자를 사용하여 스트링들을 결합한다.
    • String names = String.join(", ", "Peter", "Paul", "Mary"); // names becomes "Peter, Paul, Mary"
  • Instance 메서드

    • substring: 스트링의 substring을 리턴한다.
    String greeting = "Hello, World!";
    String location = greeting.substring(7, 12);
    // make substring using greeting's characters(index 7 to 11)
    // location becomes "World"
    •  
    • split: 구분자를 사용해서 스트링을 나누고, 나눈 스트링의 배열을 리턴한다.
    String names = "Peter, Paul, Mary";
    String[] result = names.split(", ");
    //r result becomes ["Peter", "Paul", "Mary"];

 

  • 이외에도 많은 String 메서드가 존재한다.

  • static 메서드와 instance 메서드?

    • 메서드에는 static 메서드와 instance 메서드 두 가지가 존재한다.
    • static 메서드는 ClassName.methodName 형식으로 사용하고, instance 메서드는 instanceName.methodName의 형식으로 사용한다.
Comments