코딩쿠의 코드 연대기

자바 데이터 타입, 변수 그리고 배열 본문

코딩스터디/JAVA스터디

자바 데이터 타입, 변수 그리고 배열

코딩쿠 2024. 10. 19. 12:01

학습목표

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

프리미티브 타입 종류와 값의 범위 그리고 기본 값

프리미티브 타입이란?

Java에서 프리미티브 타입(primitive type)은 데이터를 저장하는 가장 기본적인 데이터 타입입니다. 숫자, 문자, 논리값 등 단순한 값을 저장하기 위해 사용됩니다.

특징

  • 값을 직접 저장: 프리미티브 타입 변수는 실제 값을 변수에 직접 저장합니다.
  • 메모리 효율성: 값을 직접 저장하므로 메모리 사용량이 적고, 접근 속도가 빠릅니다.
  • 스택 메모리에 저장: 프리미티브 타입 변수는 스택 메모리 영역에 생성됩니다.
  • 고정된 크기: 각 타입별로 메모리에 차지하는 크기가 고정되어 있습니다. (예: int는 4바이트)
  • null 값을 가질 수 없음: 프리미티브 타입 변수는 항상 값을 가져야 하며, null 값을 가질 수 없습니다.
  • 총 8가지: boolean, byte, short, int, long, char, float, double

객체 타입(reference type)과의 비교

Java에는 프리미티브 타입 외에 객체 타입(reference type)이 있습니다. 객체 타입은 객체를 참조하는 주소를 저장하며, 힙 메모리 영역에 생성됩니다. String, 배열, 그리고 사용자가 직접 정의하는 클래스 등이 이에 속합니다.

예시

Java

int age = 30; // int는 프리미티브 타입, age 변수에 30이라는 값이 직접 저장됩니다.
String name = "홍길동"; // String은 객체 타입, name 변수에는 "홍길동" 객체의 주소가 저장됩니다.

프리미티브 타입은 Java 프로그래밍의 기본적인 구성 요소이므로, 각 타입의 특징과 사용법을 잘 이해하는 것이 중요합니다.

Java의 프리미티브 타입은 총 8가지이며, 크게 논리형, 정수형, 문자형, 실수형으로 나눌 수 있습니다. 각 타입별 크기와 범위, 기본값은 다음과 같습니다.

Java의 프리미티브 타입
타입 설명 크기(byte) 값의 범위 기본값
논리형        
boolean 참(true) 또는 거짓(false) 1 true, false false
정수형        
byte 부호 있는 정수 1 -128 ~ 127 0
short 부호 있는 정수 2 -32,768 ~ 32,767 0
int 부호 있는 정수 4 -2,147,483,648 ~ 2,147,483,647 0
long 부호 있는 정수 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0L
문자형        
char 유니코드 문자 2 '\u0000' ~ '\uffff' (0 ~ 65,535) '\u0000'
실수형        
float 부동 소수점 4 약 ±3.40282347E+38F 0.0f
double 부동 소수점 8 약 ±1.79769313486231570E+308 0.0d

참고:

  • 정수형에서 int 타입이 기본 타입입니다. 즉, byte 또는 short 타입의 변수를 연산하면 결과는 int 타입이 됩니다.
  • long 타입의 리터럴에는 접미사 'L' 또는 'l'을 붙입니다. (예: 123L)
  • float 타입의 리터럴에는 접미사 'F' 또는 'f'를 붙입니다. (예: 3.14f)
  • double 타입의 리터럴에는 접미사 'D' 또는 'd'를 붙일 수 있지만, 생략 가능합니다. (예: 3.14d 또는 3.14)

출처

  1. f-lab 자바의 프리미티브 타입과 래퍼런스 타입
  2. tcpschool _ 자바의 기본타입
  3. 자바의 상수와 리터럴
  4. https://ryulstudy.tistory.com/89 : 자바 스터디
  5. 자바 리터럴 & 변수

프리미티브 타입과 레퍼런스 타입

Java에서 데이터 타입은 크게 프리미티브 타입(Primitive Type)레퍼런스 타입(Reference Type)으로 나뉘는데, 이 둘은 데이터를 저장하고 관리하는 방식에서 중요한 차이를 보입니다.

1. 프리미티브 타입 (Primitive Type)

  • 정의: 데이터의 실제 값을 변수에 직접 저장하는 기본 데이터 타입입니다.
  • 종류: boolean, byte, short, char, int, long, float, double (총 8가지)
  • 저장 방식: 변수에 값 자체를 저장합니다.
  • 메모리 영역: 스택(Stack) 메모리에 저장됩니다.
  • 크기: 각 타입별로 고정된 크기를 가집니다. (예: int는 4바이트)
  • null 값: null 값을 가질 수 없습니다.

2. 레퍼런스 타입 (Reference Type)

  • 정의: 객체의 메모리 주소를 저장하는 데이터 타입입니다.
  • 종류: 클래스, 인터페이스, 배열, 열거형 등
  • 저장 방식: 변수에 객체의 메모리 주소를 저장합니다. (객체는 힙 메모리에 저장)
  • 메모리 영역: 힙(Heap) 메모리에 객체를 저장하고, 스택 메모리에는 객체의 주소를 저장합니다.
  • null 값: null 값을 가질 수 있습니다. (객체를 참조하지 않음을 의미)
Integer x = null;  // 가능
int y = null;      // 불가능 (컴파일 에러 발생)

 

프리미티브 타입과 레퍼런스 타입 비교

특징 프리미티브 타입 레퍼런스 타입
저장 값 실제 값 객체의 주소
메모리 영역 스택 힙(주소는 스택에 저장)
null값 불가능 가능
초기값 각 타입별 기본값 (예 : int는 0) null
연산 값 자체를 이용한 연산 객체의 메서드를 이용한 연산
비교 값 비교 (==) 주소 값 비교(==), 객체 내용 비교 (equals() 메서드)

 

예시

Java

int num = 10; // 프리미티브 타입: num 변수에 10이라는 값이 직접 저장
String str = "Hello"; // 레퍼런스 타입: str 변수에 "Hello" 객체의 주소가 저장

 

참고:

  • 프리미티브 타입은 성능면에서 효율적이지만, 기능이 제한적입니다.
  • 레퍼런스 타입은 객체 지향 프로그래밍의 핵심 개념이며, 다양한 기능을 제공합니다.

출처

  1. 자바의 프리미티브 타입과 레퍼런스 타입 이해하기
  2. https://olivejua-develop.tistory.com/47 : 자바 스터디
  3. https://blog.naver.com/slykid/221867404453 : 참조타입
  4. https://f-lab.kr/insight/understanding-java-variable-types-and-caution-for-floating-point-data : 자바에서의 변수 타입 이해와 실수형 데이터 사용 주의점
  5. https://f-lab.kr/insight/java-memory-concurrency-20240523 : 자바 메모리 구조와 동시성 이슈 해결 방법
  6. 자바의 메모리 영역과 변수 기본형, 참조형 관계

리터럴

Java에서 리터럴(literal)은 소스 코드에 직접적으로 표현되는 값 그 자체를 의미합니다. 즉, 변수에 저장되기 전의 고정된 값을 나타냅니다.

예를 들어, int age = 30; 이라는 코드에서 30 이 바로 정수형 리터럴입니다.

리터럴은 데이터 타입에 따라 여러 종류로 나뉘며, 각 타입별로 표현 방식이 다릅니다.

1. 정수형 리터럴

  • 10진수: 일반적인 숫자 표현 (예: 10, 255, -128)
  • 8진수: 0으로 시작 (예: 010, 0777)
  • 16진수: 0x 또는 0X로 시작 (예: 0x1A, 0XFF)
  • long 타입: 숫자 뒤에 L 또는 l을 붙임 (예: 100L)

2. 실수형 리터럴

  • 소수점 표현: (예: 3.14, -2.5)
  • 지수 표현: e 또는 E를 사용 (예: 1.2e-3, 5E10)
  • float 타입: 숫자 뒤에 F 또는 f를 붙임 (예: 3.14f)
  • double 타입: 숫자 뒤에 D 또는 d를 붙일 수 있지만 생략 가능 (예: 3.14d 또는 3.14)

3. 문자형 리터럴

  • 단일 문자를 작은따옴표(')로 감싸 표현 (예: 'A', '가', '?')
  • 특수 문자는 백슬래시()를 사용하여 표현 (예: '\n', '\t', '')
  • 유니코드 문자: '\u' 뒤에 16진수 코드를 사용 (예: '\uAC00')

4. 문자열 리터럴

  • 문자열을 큰따옴표(")로 감싸 표현 (예: "Hello", "안녕하세요")

5. 논리형 리터럴

  • true 또는 false

리터럴의 사용

리터럴은 변수 초기화, 연산, 메서드 호출 등 다양한 곳에서 사용됩니다.

Java

int num = 100; // 변수 num에 정수형 리터럴 100을 할당
double pi = 3.141592; // 변수 pi에 실수형 리터럴 3.141592를 할당
char ch = 'A'; // 변수 ch에 문자형 리터럴 'A'를 할당
boolean flag = true; // 변수 flag에 논리형 리터럴 true를 할당
String message = "Java 리터럴"; // 변수 message에 문자열 리터럴 "Java 리터럴"을 할당

 

참고:

  • 리터럴은 상수 풀(constant pool)이라는 메모리 영역에 저장되어 효율적으로 관리됩니다.
  • 같은 값을 가진 리터럴은 상수 풀에서 공유됩니다.

리터럴은 Java 프로그래밍의 기본적인 요소이므로, 각 타입별 리터럴의 표현 방식을 잘 이해하는 것이 중요합니다. Java에서 리터럴(literal)은 소스 코드에 직접적으로 표현되는 값 그 자체를 의미합니다. 즉, 변수에 저장되기 전의 고정된 값을 나타냅니다.

예를 들어, int age = 30; 이라는 코드에서 30 이 바로 정수형 리터럴입니다.

리터럴은 데이터 타입에 따라 여러 종류로 나뉘며, 각 타입별로 표현 방식이 다릅니다.

 

1. 정수형 리터럴

  • 10진수: 일반적인 숫자 표현 (예: 10, 255, -128)
  • 8진수: 0으로 시작 (예: 010, 0777)
  • 16진수: 0x 또는 0X로 시작 (예: 0x1A, 0XFF)
  • long 타입: 숫자 뒤에 L 또는 l을 붙임 (예: 100L)

2. 실수형 리터럴

  • 소수점 표현: (예: 3.14, -2.5)
  • 지수 표현: e 또는 E를 사용 (예: 1.2e-3, 5E10)
  • float 타입: 숫자 뒤에 F 또는 f를 붙임 (예: 3.14f)
  • double 타입: 숫자 뒤에 D 또는 d를 붙일 수 있지만 생략 가능 (예: 3.14d 또는 3.14)

3. 문자형 리터럴

  • 단일 문자를 작은따옴표(')로 감싸 표현 (예: 'A', '가', '?')
  • 특수 문자는 백슬래시()를 사용하여 표현 (예: '\n', '\t', '')
  • 유니코드 문자: '\u' 뒤에 16진수 코드를 사용 (예: '\uAC00')

4. 문자열 리터럴

  • 문자열을 큰따옴표(")로 감싸 표현 (예: "Hello", "안녕하세요")

5. 논리형 리터럴

  • true 또는 false

리터럴의 사용

리터럴은 변수 초기화, 연산, 메서드 호출 등 다양한 곳에서 사용됩니다.

Java

int num = 100; // 변수 num에 정수형 리터럴 100을 할당
double pi = 3.141592; // 변수 pi에 실수형 리터럴 3.141592를 할당
char ch = 'A'; // 변수 ch에 문자형 리터럴 'A'를 할당
boolean flag = true; // 변수 flag에 논리형 리터럴 true를 할당
String message = "Java 리터럴"; // 변수 message에 문자열 리터럴 "Java 리터럴"을 할당

참고:

  • 리터럴은 상수 풀(constant pool)이라는 메모리 영역에 저장되어 효율적으로 관리됩니다.
  • 같은 값을 가진 리터럴은 상수 풀에서 공유됩니다.

리터럴은 Java 프로그래밍의 기본적인 요소이므로, 각 타입별 리터럴의 표현 방식을 잘 이해하는 것이 중요합니다.

출처

  1. (java) 리터럴 & 변수
  2. 자바의 스트링 리터럴과 객체 참조의 이해 : https://f-lab.kr/insight/understanding-string-literals-and-object-references

자바 변수 선언 및 초기화

Java에서 변수를 선언하고 초기화하는 방법은 다음과 같습니다.

1. 변수 선언

변수를 선언할 때는 데이터 타입변수 이름을 지정해야 합니다.

Java

데이터타입 변수이름;
  • 데이터 타입: 변수에 저장될 데이터의 종류를 나타냅니다. (예: int, double, String 등)
  • 변수 이름: 변수를 식별하기 위한 이름입니다. (예: age, name, price 등)

예시:

Java

int age;             // 정수형 변수 age 선언
double price;        // 실수형 변수 price 선언
String name;          // 문자열 타입 변수 name 선언
boolean isMarried;   // 논리형 변수 isMarried 선언

2. 변수 초기화

변수를 선언한 후에는 값을 할당하여 초기화해야 합니다. 변수 초기화는 = 연산자를 사용합니다.

Java

변수이름 = 값;
  • 값: 변수에 저장할 데이터입니다. (예: 30, 3.14, "홍길동", true 등)

예시:

Java

age = 30;             // 변수 age에 30을 할당
price = 12.5;        // 변수 price에 12.5를 할당
name = "홍길동";          // 변수 name에 "홍길동"을 할당
isMarried = false;   // 변수 isMarried에 false를 할당

3. 선언과 동시에 초기화

변수 선언과 초기화를 동시에 할 수도 있습니다.

Java

데이터타입 변수이름 = 값;

예시:

Java

int age = 30;             // 정수형 변수 age를 선언하고 30으로 초기화
double price = 12.5;        // 실수형 변수 price를 선언하고 12.5로 초기화
String name = "홍길동";          // 문자열 타입 변수 name을 선언하고 "홍길동"으로 초기화
boolean isMarried = false;   // 논리형 변수 isMarried를 선언하고 false로 초기화

참고:

  • 변수는 사용하기 전에 반드시 선언하고 초기화해야 합니다.
  • 변수 이름은 자바 식별자 규칙을 따라야 합니다. (영문자, 숫자, _, $ 사용 가능, 숫자로 시작 불가능, 예약어 사용 불가능)
  • 변수의 값은 언제든지 변경할 수 있습니다.

추가 정보:

  • 변수의 범위 (Scope): 변수는 선언된 위치에 따라 사용 가능한 범위가 제한됩니다.
    • 지역 변수: 메서드 또는 블록 내부에서 선언된 변수는 해당 메서드 또는 블록 내에서만 사용 가능합니다.
    • 인스턴스 변수: 클래스 내부에서 선언된 변수는 해당 클래스의 객체를 통해 접근 가능합니다.
    • 클래스 변수: static 키워드를 사용하여 선언된 변수는 클래스 이름으로 직접 접근 가능합니다.

출처

  1. 자바 변수와 데이터 타입
  2. 개발자 당당근
  3. 자바 변수 선언과 초기화

변수의 스코프와 라이프타임

Java에서 변수의 스코프(scope)라이프타임(lifetime)은 변수가 어디에서 접근 가능하고, 메모리에 언제까지 존재하는지를 결정하는 중요한 개념입니다.

1. 스코프 (Scope)

변수의 스코프는 해당 변수를 사용할 수 있는 유효 범위를 의미합니다. 변수는 선언된 위치에 따라 스코프가 결정되며, 스코프 밖에서는 해당 변수에 접근할 수 없습니다.

  • 블록 스코프 (Block Scope): { } (중괄호) 로 둘러싸인 블록 내부에서 선언된 변수는 해당 블록 내에서만 접근 가능합니다. 메서드, if문, for문 등의 블록이 이에 해당합니다.
  • 메서드 스코프 (Method Scope): 메서드 내부에서 선언된 변수는 해당 메서드 내에서만 접근 가능합니다. 매개변수도 메서드 스코프를 가집니다.
  • 클래스 스코프 (Class Scope): 클래스 내부에서 선언된 변수는 해당 클래스 전체에서 접근 가능합니다. 인스턴스 변수와 클래스 변수가 이에 해당합니다.

예시:

Java

public class ScopeExample {
    int instanceVar = 10; // 클래스 스코프

    public void myMethod(int param) { // param: 메서드 스코프
        int localVar = 20; // 블록 스코프

        if (true) {
            int blockVar = 30; // 블록 스코프
            System.out.println(localVar); // localVar 접근 가능 (같은 메서드 내)
            System.out.println(instanceVar); // instanceVar 접근 가능 (클래스 스코프)
            System.out.println(param); // param 접근 가능 (같은 메서드 내)
        }

        System.out.println(localVar); // localVar 접근 가능 (같은 메서드 내)
        System.out.println(instanceVar); // instanceVar 접근 가능 (클래스 스코프)
        // System.out.println(blockVar); // 오류! blockVar는 if 블록 내에서만 접근 가능
    }
}

2. 라이프타임 (Lifetime)

변수의 라이프타임은 변수가 메모리에 할당되었다가 해제될 때까지의 시간을 의미합니다. 변수의 스코프가 끝나면 라이프타임도 종료됩니다.

  • 블록 스코프 변수: 블록이 실행되는 동안에만 메모리에 존재하고, 블록 실행이 끝나면 메모리에서 해제됩니다.
  • 메서드 스코프 변수: 메서드가 호출되어 실행되는 동안에만 메모리에 존재하고, 메서드 실행이 끝나면 메모리에서 해제됩니다.
  • 인스턴스 변수: 객체가 생성될 때 메모리에 할당되고, 객체가 더 이상 사용되지 않을 때 가비지 컬렉터에 의해 메모리에서 해제됩니다.
  • 클래스 변수: 클래스가 로딩될 때 메모리에 할당되고, 프로그램이 종료될 때 메모리에서 해제됩니다.

스코프와 라이프타임의 관계

변수의 스코프는 라이프타임에 영향을 미칩니다. 스코프가 넓을수록 라이프타임이 길어지는 경향이 있습니다. 예를 들어, 클래스 변수는 클래스 스코프를 가지므로 프로그램 전체에서 접근 가능하며, 프로그램이 종료될 때까지 메모리에 존재합니다. 반면, 블록 스코프 변수는 해당 블록 내에서만 접근 가능하며, 블록 실행이 끝나면 메모리에서 해제됩니다.

변수의 스코프와 라이프타임을 이해하는 것은 메모리 관리 및 프로그램 효율성에 중요합니다. 불필요하게 스코프가 넓은 변수를 사용하면 메모리 낭비가 발생할 수 있으므로, 변수의 스코프를 적절하게 제한하는 것이 좋습니다.

타입 변환, 캐스팅 그리고 타입 프로모션

Java에서 타입 변환(Type Conversion)은 변수 또는 값의 데이터 타입을 다른 데이터 타입으로 변경하는 것을 의미합니다. 크게 자동 타입 변환(프로모션)명시적 타입 변환(캐스팅)으로 나눌 수 있습니다.

1. 자동 타입 변환 (프로모션, Promotion)

  • 정의: 작은 데이터 타입의 값을 더 큰 데이터 타입으로 자동으로 변환하는 것
  • 조건: 데이터 손실이 발생하지 않아야 함
  • 예시:
    • intlong, float, double
    • floatdouble

Java

int num1 = 10;
long num2 = num1;  // int 값이 long 타입으로 자동 변환

2. 명시적 타입 변환 (캐스팅, Casting)

  • 정의: 프로그래머가 직접 데이터 타입을 변환하는 것
  • 방법: 변환하려는 데이터 타입을 괄호 () 로 감싸서 변수 또는 값 앞에 명시
  • 주의: 데이터 손실이 발생할 수 있음

Java

double num1 = 10.5;
int num2 = (int) num1;  // double 값을 int 타입으로 명시적 변환 (소수점 이하 버림)

타입 변환의 종류

  • 확대 변환 (Widening Conversion): 작은 데이터 타입에서 큰 데이터 타입으로 변환 (자동 타입 변환)
  • 축소 변환 (Narrowing Conversion): 큰 데이터 타입에서 작은 데이터 타입으로 변환 (명시적 타입 변환 필요)

캐스팅 연산자

  • (타입): 변수 또는 값 앞에 붙여서 원하는 데이터 타입으로 변환

캐스팅 주의 사항

  • 데이터 손실: 큰 데이터 타입을 작은 데이터 타입으로 변환할 때 데이터 손실이 발생할 수 있습니다. (예: double → int 변환 시 소수점 이하 버림)
  • 오버플로우/언더플로우: 표현 범위를 벗어나는 값으로 변환할 때 오버플로우 또는 언더플로우가 발생할 수 있습니다.

타입 프로모션과 캐스팅 활용

  • 연산: 서로 다른 데이터 타입의 값을 연산할 때, 컴파일러는 자동으로 타입 프로모션을 수행하여 더 큰 데이터 타입으로 변환합니다.
  • 메서드 호출: 메서드의 매개변수 타입에 맞게 값을 변환해야 할 때 사용합니다.
  • 데이터 타입 변환: 특정 데이터 타입으로 값을 변환해야 할 때 사용합니다.

예시

Java

int num1 = 10;
double num2 = 3.14;

double result = num1 + num2; // num1이 double 타입으로 자동 변환되어 연산
int sum = num1 + (int) num2; // num2를 int 타입으로 명시적 변환하여 연산

타입 변환, 캐스팅, 타입 프로모션은 Java 프로그래밍에서 자주 사용되는 개념이므로, 각각의 동작 방식과 주의 사항을 잘 이해하는 것이 중요합니다.

출처

  1. JavaGYM _ 자바 유형 캐스팅 : https://codegym.cc/ko/groups/posts/ko.662.--
  2. f-lab _ 자바의 타입 프로모션과 타입 캐스팅 이해하기 : https://f-lab.kr/insight/understanding-java-type-promotion-and-casting
  3. f-lab _ 자바의 타입 캐스팅과 형변환 이해하기 : https://f-lab.kr/insight/understanding-type-casting-and-conversion-in-java-20240829

Java에서 배열은 같은 타입의 데이터를 여러 개 저장할 수 있는 자료구조입니다. 1차 배열은 선형적으로 데이터를 저장하고, 2차 배열은 행과 열을 가진 표 형태로 데이터를 저장합니다.

 

1. 1차 배열 선언

1차 배열을 선언하는 방법은 다음과 같습니다.

Java

데이터타입[] 배열이름;

또는

Java

데이터타입 배열이름[];
  • 데이터타입: 배열에 저장될 데이터의 타입을 지정합니다. (예: int, double, String 등)
  • 배열이름: 배열을 식별하기 위한 이름입니다.

예시:

Java

int[] numbers;
String[] names;
double[] scores;

 

2. 1차 배열 생성

배열을 선언한 후에는 new 연산자를 사용하여 배열을 생성하고 메모리를 할당해야 합니다. 배열을 생성할 때는 배열의 크기를 지정해야 합니다.

Java

배열이름 = new 데이터타입[크기];
  • 크기: 배열에 저장할 수 있는 요소의 개수입니다.

예시:

Java

numbers = new int[5]; // 크기가 5인 int 배열 생성
names = new String[10]; // 크기가 10인 String 배열 생성
scores = new double[3]; // 크기가 3인 double 배열 생성

 

3. 1차 배열 선언과 생성 동시에 하기

배열 선언과 생성을 동시에 할 수도 있습니다.

Java

데이터타입[] 배열이름 = new 데이터타입[크기];

예시:

Java

int[] numbers = new int[5];
String[] names = new String[10];
double[] scores = new double[3];

 

4. 2차 배열 선언

2차 배열을 선언하는 방법은 다음과 같습니다.

Java

데이터타입[][] 배열이름;

또는

Java

데이터타입 배열이름[][];

예시:

Java

int[][] matrix;
String[][] board;

 

5. 2차 배열 생성

2차 배열을 생성할 때는 행과 열의 크기를 지정해야 합니다.

Java

배열이름 = new 데이터타입[행의 크기][열의 크기];

예시:

Java

matrix = new int[3][4]; // 3행 4열의 int 배열 생성
board = new String[5][5]; // 5행 5열의 String 배열 생성

 

6. 2차 배열 선언과 생성 동시에 하기

2차 배열 선언과 생성을 동시에 할 수도 있습니다.

Java

데이터타입[][] 배열이름 = new 데이터타입[행의 크기][열의 크기];

예시:

Java

int[][] matrix = new int[3][4];
String[][] board = new String[5][5];

추가 정보:

  • 배열의 각 요소는 인덱스를 사용하여 접근할 수 있습니다. 인덱스는 0부터 시작합니다.
  • 배열의 크기는 한 번 정해지면 변경할 수 없습니다.
  • 배열을 초기화할 때 중괄호 {} 를 사용하여 값을 직접 지정할 수 있습니다. (예: int[] numbers = {1, 2, 3, 4, 5};)

배열은 Java 프로그래밍에서 자주 사용되는 자료구조이므로, 선언, 생성, 초기화 방법을 잘 이해하고 활용하는 것이 중요합니다.

출처

  1. 배열의 개념
  2. java GYM _ Java의 배열 : https://javarush.com/ko/groups/posts/ko.2176.java-

타입 추론, var

Java 10부터 도입된 var 키워드는 지역 변수를 선언할 때 타입을 명시적으로 지정하지 않고, 컴파일러가 초기화 값을 통해 변수의 타입을 자동으로 추론하도록 하는 기능입니다.

장점:

  • 코드 간결성: 타입을 명시하지 않아 코드가 간결해지고 가독성이 향상됩니다. 특히, 복잡한 타입을 사용할 때 유용합니다.
  • 타입 안정성: 컴파일러가 타입을 추론하기 때문에 타입 안정성을 보장합니다.
  • 생산성 향상: 타입을 명시하는 번거로움을 줄여 개발 생산성을 높일 수 있습니다.

사용 방법:

Java

var 변수이름 = 초기값;

예시:

Java

var name = "홍길동";        // String 타입으로 추론
var age = 30;              // int 타입으로 추론
var price = 12.5;          // double 타입으로 추론
var isMarried = false;     // boolean 타입으로 추론
var list = new ArrayList<String>(); // ArrayList<String> 타입으로 추론

주의 사항:

  • 초기값 필수: var 키워드를 사용할 때는 반드시 초기값을 지정해야 합니다. 컴파일러가 초기값을 통해 타입을 추론하기 때문입니다.
  • 지역 변수에만 사용: var 키워드는 메서드 내부 또는 블록 내부에서 선언되는 지역 변수에만 사용할 수 있습니다. 멤버 변수, 매개변수, 리턴 타입에는 사용할 수 없습니다.
  • null 초기화 불가: var 변수를 null로 초기화할 수 없습니다. 컴파일러가 타입을 추론할 수 없기 때문입니다.
  • 람다 표현식 제약: 람다 표현식에서 var를 사용할 때는 명시적인 타입을 지정해야 합니다.
  • 가독성 고려: var 키워드를 남용하면 코드의 가독성이 떨어질 수 있습니다. 특히, 타입이 명확하지 않은 경우에는 명시적으로 타입을 지정하는 것이 좋습니다.

var 키워드는 Java 코드를 간결하게 작성하는 데 유용한 도구이지만, 위의 주의 사항을 숙지하고 적절하게 사용하는 것이 중요합니다.

출처

  1. 자바 var
  2. 자바 var : https://velog.io/@greentea/%EC%9E%90%EB%B0%94-var