Java 기초 문법 정리(1강 - 3강)

1강 자바 프로그래밍 시작하기

프로그래밍: 컴퓨터에게 일을 시키기 위해 프로그래밍 언어로 만든 명령어 집합인 프로그램을 만드는 일
컴파일: 프로그래밍 언어를 기계어로 바꾸어 주는 일
컴파일러: 기계어로 바꾸어 주는 프로그램 자바를 설치하면 자바 컴파일러도 설치 됨
자바
  • 자바와 다른 언어의 차이점: 플랫폼에 독립적인 프로그래밍을 할 수 있음

  • 자바 컴파일러가 바이트 코드(class 파일)을 만들고 이를 각 운영체제에 따른 자바 가상머신(Java Virtual Machine)이 있에서 실행하게 된다.

특징
  • 객체지향 프로그램으로 유지 보수와 확장성이 좋음
  • 안정적
  • 풍부한 라이브러리와 오픈소스와 연동 가능
객체 지향 프로그래밍을 해야하는 이유
  • 재사용성
  • 유지보수
  • 코드 관리
  • 신뢰성 높은 프로그램
자바로 만들 수 있는 프로그램들
  • 웹 서버
  • 모바일 앱(Android)
  • 게임

JDK, JRE 설치 https://www.oracle.com/technetwork/java/index.html

이클립스 설치 https://www.eclipse.org/

2강 변수와 자료형

2진수
  • 비트(bit): 컴퓨터에서 자료를 표현하는 최소 단위(0 또는 1)

  • 바이트(byte): 8bit

  • 2진수: 컴퓨터에서 표현되는 자료의 형태

  • 8진수: 2진수를 3비트씩 모아서 표현

  • 16진수: 2진수를 4비트씩 모아서 표현

컴퓨터에서 음수 표현하기
  • 2의 보수로 표현: 양수와 음수는 더해서 0이 되어야 함

  • 2의 보수 만드는 방법: 1의 보수를 취하고 나서 1을 더해준다.

    0000 0101 (5)
    1111 1010 (1의 보수)
    1111 1011 (5에 대한 2의 보수)
    
변수
  • 변하는 수, 변하는 값을 프로그램에서 나타내기 위한 방법

  • 변수 선언하기

    자료형 변수 이름;
      
    int age;
    
  • 변수에 맞는 자료형과 변수 이름으로 선언

변수와 메모리
  • 변수를 선언하는 것은 해당 자료형의 크기 만큼의 메모리를 사용하겠다는 것

  • 메모리의 위치를 변수 이름으로 참조

변수 이름
  • 영문자나 숫자 사용, 숫자로 시작할 수 없음

  • 특수 문자는 _와 $만 가능

  • 예약어는 사용 불가. 변수는 쓰임에 맞는 이름으로 명명하는 것이 가독성에 좋음

  • Camel case 사용

자료형
  • 기본형: 자바 언어에서 기본적으로 제공하는 자료형, 메모리의 크기가 정해져 있음.
    • 정수형, 문자형, 실수형, 논리형
  • 참조형: 클래스 자료형. JDK에서 제공되는 클래스와 프로그래머가 정의하는 클래스. 클래스에 따라 사용하는 크기가 다름
기본 자료형
  정수형 문자형 실수형 논리형
1 byte byte     boolean
2 byte short char    
4 byte int   float  
8 byte long   double  
바이트 크기와 표현 범위
  크기 수의 범위
byte 1 -2^7 ~ 2^7-1
short 2 -2^15 ~ 2^15-1
int 4 -2^31 ~ 2^31-1
long 8 -2^63 ~ 2^63-1
문자 자료형
  • 내부적으로는 비트의 조합으로 표현

  • 인코딩: 각 문자에 따른 특정 숫자값(코드값) 부여

  • 디코딩: 숫자 값을 원래의 문자로 변환

문자 세트(Character set)
  • 문자 세트: 문자를 위한 코드값(숫자값)을 정해 놓은 set

  • ASCII : 1바이트로 영문자, 숫자, 특수 문자 등을 표현

  • Unicode: 한글과 같은 복잡한 언어를 표현하기 위한 표준 인코딩 UTF-8, UTF-16이 대표적

  • 문자를 변수에 저장하면 문자에 해당하는 코드 값이 저장됨

실수와 논리 자료형
  • 실수는 double 자료형이 기본

  • float을 사용할 때는 f,F 식별자 사용

부동 소수점 방식
  • 실수를 지수부와 가수부로 표현

    0.1을 표현하는 방식
    1.0 * 10^-1
    1.0 → 가수
    -1 → 지수
    
  • 부동 소수점 방식의 오류

    • 지수와 가수로 표현되는 부동 소수점은 0을 표현할 수 없음
    • 약간의 오차 발생 가능성
논리 자료형
  • boolean으로 선언
  • 논리값 true, false 표현
자료형 없이 변수 사용하기(Java 10)
  • 지역 변수 자료형 추론(local variable type inference)

  • 변수에 대입되는 값을 보고 컴파일러가 추론

    var num = 10;
    var dNum = 10.0;
    var str = "hello";
      
    int num = 10;
    double dNum = 10.0;
    String str = "hello";
    
상수와 리터럴
  • 상수(constant): 변하지 않는 수

  • 리터럴(literal): 프로그램에서 사용하는 모든 숫자, 값, 논리 값

  • 모든 리터럴은 상수 풀(constant pool)에 저장되어 있음

  • 상수 풀에 저장될 때는 정수는 int, 실수는 double로 저장됨

형 변환
  • 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어남

  • 묵시적 형 변환(implicit type conversion): 작은 수에서 큰 수로 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우

  • 명시적 형 변환(explicit type conversion): 변환되는 자료형을 명시. 자료의 손실 발생 가능. type casting 필요

3강 연산자

항과 연산자
  • 항(operand): 연산에 사용되는 값

  • 연산자(operator): 항을 이용하여 연산하는 기호

    연산자 설명
    단항 연산자 항이 한 개인 연산자 ++num
    이항 연산자 항이 두 개인 연산자 num1 + num2;
    삼항 연산자 항이 세 개인 연산자
    간단한 조건문 대신 사용할 수 있음
    (5 > 2) ? 1 : 0;
    int num = (5 > 3) ? 10 : 20;
대입 연산자
  • 왼쪽 변수의 값이 오른쪽에 대입

  • 우선 순위가 가장 낮은 연산자-

    int num = 20;
    
부호 연산자
  • 단항 연산자
  • 변수의 부호를 유지하거나(+) 바꿈(-)
  • 실제 변수의 값이 변하려면 대입 연산자를 사용해야 함
산술 연산자
  • %는 나머지를 구하는 연산자

  • 숫자 n의 나머지 범위는 0 ~ n-1

    연산자 기능
    + 두 항 더하기 5 + 3
    - 앞에 있는 항에서 뒤에 있는 항 빼기 5 - 3
    * 두 항 곱하기 5 * 3
    / 앞에 있는 항에서 뒤에 있는 항을 나누어 몫 구하기 5 / 3
    % 앞에 있는 항에서 뒤에 있는 항 나누어 나머지 구하기 5 % 3
복합 대입 연산자
  • 대입 연산자와 다른 연산자가 함께 쓰임

    연산자 기능
    += 두 항의 값을 더해서 왼쪽 항에 대입 num += 2;
    -= 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입 num -= 2;
    *= 두 항의 값을 곱해서 왼쪽 항에 대입 num *= 2;
    /= 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입 num /= 2;
    %= 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입 num %= 2;
    «= 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입 num «= 2;
    »= 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입
    왼쪽에 채워지는 비트 값은 부호 비트와 동일
    num »= 2;
    »>= 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입
    왼쪽에 채워지는 비트값은 0
    num »>= 2;
    &= 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입 num &= 2;
    |= 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입 num |= 2;
    ^= 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입 num ^= 2;
단항 연산자
  • 변수의 값을 1 더하거나 뺄 때 사용

  • 연산자가 항의 앞에 있는지 뒤에 있는지에 따라 결과가 달라짐

    연산자 기능
    ++ 항의 값에서 1 더하기 val = ++num; 먼저 num값이 1 증가한 후 val 변수에 대입
    val = num++; val 변수에 기존 num 값을 대입한 후 num값 1 증가
    항의 값에서 1 빼기 val = –num; 먼저 num 값이 1 감소한 후 val 변수에 대입
    val = num–; val 변수에 기존 num 값을 대입한 후 num 값 1 감소
관계 연산자(비교 연산자)
  • 연산의 결과가 true/false로 반환

    연산자 기능
    > 왼쪽 항이 크면 참, 아니면 거짓 반환 num > 3;
    < 왼쪽 항이 작으면 참, 아니면 거짓 반환 num < 3;
    >= 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓 반환 num >= 3;
    <= 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓 반환 num <= 3;
    == 두 개의 항의 값이 같으면 참, 아니면 거짓 반환 num == 3;
    != 두 개의 항이 다르면 참, 아니면 거짓 반환 num != 3;
논리 연산자
  • 관계 연산자와 함께 많이 사용

  • 연산의 결과가 true/false로 반환

    연산자 기능
    && (논리 곱) 두 항이 모두 참인 경우에만 참, 그렇지 않은 경우는 거짓 boolVal = (5 > 3) && (5 > 2);
    || (논리 합) 두 항 중 하나의 항만 참이면 참, 두 항이 모두 거짓이면 결과 값은 거짓 boolVal = (5 > 3) || (5 < 2);
    ! (부정) 단항 연산자. 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꿈 boolVal = !(5 > 3);
단락 회로 평가(short circuitevaluation)
  • 논리 곱(&&)은 두 항이 모두 true일 때만 결과가 true
    • 앞의 항이 false이면 뒤 항의 결과를 평가하지 않아도 false
  • 논리 합(   )은 두 항이 모두 false일 때만 결과가 false
    • 앞의 항이 true이면 뒤 항의 결과를 평가하지 않아도 true
  • 실제 프로그램에서 예상하지 않은 결과가 발생할 수 있음
비트 연산자
  • 대입연산자와 다른 연산자가 함께 쓰임
  • 마스크: 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
  • 비트 켜기: 특정 비트들만을 1로 설정해서 사용하고 싶을 때

    • & 00001111 (하위 4비트 중 1인 비트만 꺼내기)
  • 비트 끄기: 특정 비트들만을 0으로 설정해서 사용하고 싶을 때

    • 11110000 (하위 4비트 중 0인 비트만 0으로 만들기)
  • 비트 토글: 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때

    연산자 설명
    ~ 비트의 반전(1의 보수) a = ~a;
    & 비트 단위 AND 1 & 1 1 반환 그 외는 0
    | 비트 단위 OR 0 | 0 0 반환 그 외는 1
    ^ 비트 단위 XOR 두 개의 비트가 서로 다른 경우에 1 반환
    « 왼쪽 shift a«2 변수 a를 2비트만큼 왼쪽 이동
    » 오른쪽 shift a»2 변수 a를 2비트만큼 오른쪽 이동
    »> 오른쪽 shift » 동일한 연산
    채워지는 비트가 부호와 상관없이 0임
연산자 우선 순위
우선 순위 연산자 연산 방향
1 일차식 () [] .
2 단항 ! ++ – + -
3 산술 % /
4 산술 + -
5 비트 이동 « »
6 관계 < > <= >=
7 관계 == !=
8 비트 곱 &
9 비트 차 ^
10 비트 합 |
11 논리 곱 &&
12 논리 합 ||
13 조건 ? :
14 대입 = += -= *= %= /=