[Java] 자바 기본 문법 총정리

2025. 11. 21. 18:03·Language/Java
반응형

 

1️⃣ 변수

  • 자료를 저장하기 위한 메모리 공간
  • 타입에 따라 크기가 달라짐
  • 메모리 공간에 값(value)을 할당(assign) 후 사용

 

🔹 변수의 타입

  • 기본형 (primitive type)
    • 미리 정해진 크기의 데이터 표현
    • 변수 자체에 값 저장
  • 참조형 (reference type)
    • 크기가 미리 정해질 수 없는 데이터의 표현
    • 변수에는 실제 값을 참조할 수 있는 주소만 저장
    • 기본형 8개 빼고는 다 참조형임

 

🔹 기본형의 크기

  • 파란색의 의미
    • 정수형에서는 int가 기본, 실수형에서는 double이 기본이다
  • byte는 8bit인데 왜 2^7까지만 처리하지?
    • 8칸 중에 맨 앞 칸은 부호 비트이기 때문이다

정수 계산 시 overflow 주의

필요한 수의 크기를 고려해서 int 또는 long 등 타입 선택

 

실수의 연산은 정확하지 않다

  • 부동소수점 정밀도 오차 때문
  • 유효 자릿수를 이용한 반올림 처리

정확한 연산을 하려면?

  • 정수로 만들어서(정수가 되도록 10^n을 곱함) 연산한 후에 다시 10^n으로 나눔

 


 

2️⃣ 형 변환 (Type casting)

  • 변수의 형을 다른 형으로 변환하는 것
    • char → int, int → char ..etc
  • primitive는 primitive끼리, reference는 reference끼리 형 변환 가능
    • boolean은 다른 기본형과 호환되지 않음
    • 기본형과 참조형의 형 변환을 위해서 Wrapper 클래스 사용
      • Wrapper 클래스는 8개 (기본형이 8개니까)

 

🔹 형 변환 방법

  • 형 변환 연산자(괄호) 사용
  • 명시적 형 변환
    • 큰집 → 작은집
    • 값 손실이 발생할 수 있으므로 프로그래머 책임 하에 형 변환 진행
  • 묵시적 형 변환
    • 작은집 → 큰집
    • 값의 크기, 타입의 크기가 아닌 타입의 표현 범위가 커지는 방향으로 할당할 경우
    • 자료의 손실 걱정이 없으므로 형 변환 연산 생략

cf) float이 long보다 bit 수가 작아도 정수와 실수는 저장 방식 자체가 다르기 때문에 long보다 float이 더 큰 거임

 

🔹 오버플로우

int i1 = Integer.MAX_VALUE;
int i2 = i1 + 1; // 오버플로우 (int 값 범위 벗어남)
long l1 = i1 + 1; // 오버플로우 (이미 int 값 범위 벗어난 값을 long에 담는 것임)
long l2 = (long) (i1 + 1); // 오버플로우 (이미 i1에 1 더해서 깨진 값을 long으로 변환하는 것임)
long l3 = (long) i1 + 1; // ㄱㅊ (long으로 변환한 i1에 1을 더한 것이라 괜찮음)
int i3 = 1000000 * 1000000 / 1000000; // 값 깨짐 (이미 곱했을 때 깨짐)
int i4 = 1000000 / 1000000 * 1000000; // ㄱㅊ (나누는 게 먼저여서 괜찮음)
  • 산술 이항 연산자는 연산 전에 피연산자의 타입을 일치시킴
  • 피연산자의 크기가 4byte(int) 미만이면 int로 변경한 후 연산 진행
  • 두 개의 피연산자 중 큰 타입으로 형 변환 후 연산 진행

 

🔹 `|`와 `||`의 차이

  • `(조건식1) | (조건식2)`
    • 앞에가 true여도 뒤에도 연산함
  • `(조건식1) || (조건식2)`
    • 앞에가 true면 뒤는 연산하지 않음 (숏서킷)
  • `&`와 `&&`도 마찬가지
    • &&는 앞에가 false면 뒤는 연산하지 않음

 


 

3️⃣ 조건문

  • if문 - if문 여러 개보다 가능할 때는 if, else if 사용 권장
  • switch문 - break 유의!!
    • switch 문에서는 long, float, double, 참조 타입, boolean 불가능
    • switch는 내부적으로 정수 테이블 점프(int-based jump table)를 사용하기 때문에 32bit 정수로 표현 가능해야 함

 


 

4️⃣ 반복문

  • 변수 초기화, 반복 조건, 증감식, 실행문
  • for, for-each, while, do-while

 


 

5️⃣ 배열

동일한 타입의 데이터 n개 이상을 하나의 연속된 메모리 공간에서 관리하는 것

  • 동일한 타입의 변수를 여러 개 사용하면 변수의 개수 증가, 코드의 길이 증가, 반복문 적용 불가, 변수의 수가 동적으로 결정될 경우 사용 불가 → 배열 사용
  • reference 타입

 

🔹 Array 만들기 #1

`타입[] 변수명;` 또는 `타입 변수명 [];`

  • ex) int [] points; String [] names;

 

🔹 변수 생성

  • new keyword와 함께 저장하려는 데이터 타입 및 길이 지정 `new data_type[length]`
  • `new int [3]`: int 타입의 자료 3개를 저장할 수 있는 배열을 메모리에 생성
  • `points = new int [3]`: 생성된 배열을 points라는 변수에 할당
  • points는 메모리에 있는 배열을 가리키는 reference 타입 변수

 

🔹 배열 요소의 초기화

  • 배열의 생성과 동시에 저장 대상 자료형에 대한 기본값으로 default 초기화 진행

 

🔹 배열의 생성과 메모리 사용 과정

`int [] points = new int[3];`

  1. 배열 선언: int [] points;
  2. 배열 생성: new int[3];
    • int 타입의 데이터 3개를 담을 수 있는 메모리 공간 확보 
    • 메모리에 연속된 공간 차지 → 크기 변경 불가!
    • Type에 대한 default 초기화
  3. 참조 값 할당: point = new int[3];
    • 배열의 주소를 변수에 할당하여 참조하게 함
  4. 요소에 값 할당: points[0] = 1;
    • points[1] = ‘A’; ← ‘A’는 형 변환되어 65로 들어감 (아스키코드)

cf) for문 대신 `ArraystoString()`으로 출력

cf) `toCharArray()`: 문자열을 배열로 변환

 

🔹 Array 만들기 #2

  • 생성과 동시에 할당한 값으로 초기화
    • `int [] b = new int [] {1, 3, 5, 7, 9};`
    • `int [] c = {1, 3, 5, 7, 9};`
  • 선언과 생성을 따로 처리할 경우 초기화 주의
    • `int [] points;` // 선언할 때는 배열의 크기를 알 수 없을 때
    • `points = new int [] {1, 3, 5, 7, 9};`

 

🔹 for-each with Array

  • 가독성이 개선된 반복문
  • 배열 및 Collections에서 사용
  • index 대신 직접 요소(element)에 접근하는 변수를 제공
    • naturally read only (copied value)
int intArray [] = { 1, 3, 5, 7, 9 };

for (int x : intArray) {
	System.out.println(x);
}

 

🔹 Array is Immutable

  • 배열은 최초 메모리 할당 이후, 변경할 수 없음
  • 개별 요소는 다른 값으로 변경이 가능하나, 요소를 추가하거나 삭제할 수는 없음
  • 새로운 배열을 참조할 수 있으나 그것은 이전 연결을 끊고 새로운 배열에 연결한 것뿐임

 

cf) `System.arrayCopy`, `Arrays.copyOf`: 배열 복사 method

  • 얕은 복사: 주소 값만 그냥 넣어주는 거 (복사본을 수정하면 원본도 수정됨)
  • 깊은 복사: 배열값을 새로 만들어서 똑같이 넣어주는 것

 

🔹 2차원 Array 만들기 #1

  • int Type 기준으로 4 x 3 배열 만들기
    • 선언
      • `int [][] intArray;`
      • `int intArray [][];`
      • `int [] intArray [];`
    • 생성
      • `intArray = new int[4][3];`
    • 값 할당
      • `intArray[0][2] = 3;`

int 100차원 배열은 int 99차원 배열을 저장하는 배열이다.

결국 다 1차원 배열이다. 그 1차원 배열에 들어가 있는 데이터가 배열인 것.

 

🔹 2차원 Array 만들기 #2

  • int Type 기준으로 4 x 3 배열과 값을 동시에 만들기
    • 선언, 할당, 생성 동시에
      • `int [][] intArray = {{ 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 }};`

 

🔹 2차원 Array 만들기 #3

  • int Type 기준으로 4 x ? 배열 만들기
    • 2차원 배열 선언 선언 / 1차원 배열 생성
      • `int [][] intArray = new int[4][];`
  • 1차 Array만 생성 후, 필요에 따라 2차 배열을 생성함
    • 2차 생성
      • `intArray[0] = new int[3];`
      • `intArray[1] = new int[2];`
      • `intArray[2] = {1, 2, 3};` (X)
    •  

 

반응형
'Language/Java' 카테고리의 다른 글
  • [Java] 객체 지향 프로그래밍 - 상속(Inheritance)
  • [Java] 객체 지향 프로그래밍 - 추상화(Abstraction)
  • [Java] 클래스와 데이터
  • [Java] 자바 메서드
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (212) N
      • SSAFY (10)
      • Algorithm (122)
        • 이론 (6)
        • 백준 (BOJ) (114)
        • 프로그래머스 (1)
        • 코드트리 (1)
      • Trouble Shooting (11)
      • Frontend (7)
      • React (17)
      • Next.js (5)
      • Vue (4)
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (12) N
        • JavaScript (0)
        • Java (12) N
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
      • 기타 (1)
        • Tistory (1)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    싸피
    bfs
    DP
    티스토리챌린지
    그리디
    SSAFY
    순열
    SSAFYcial
    Heap
    강의
    dfs
    중복순열
    힙
    수학
    html5
    React
    오블완
    Algorithm
    우선순위큐
    Java
    백준
    재귀
    Next.js
    파이썬
    블록체인
    알고리즘
    Error
    백트래킹
    구현
    브루트포스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
올콩
[Java] 자바 기본 문법 총정리
상단으로

티스토리툴바