Java 자바의 기초 (변수, 데이터 타입, 연산자, 조건문, 반복문)

개발일지

주기적으로 개발일지를 작성하며, 최근에 공부한 내용을 정리해보면서 어떤 것들을 습득했는지 되돌아보는 시간을 가지려고 합니다. 자바스크립트를 공부하다가 최근에 자바로 전환하여 약 일주일 정도 공부해오고 있습니다. 자바스크립트와 유사한 부분이 있어 아직까지는 비교적 수월하게 진행 중입니다.

이번 주 동안 중점적으로 다뤄 본 내용은 자바의 기초에 대한 이해입니다. 변수, 데이터 타입, 연산자, 조건문, 반복문 등의 기본적인 요소들을 다뤄봄으로써 언어의 기본 구조를 숙지했습니다. 또한, 객체지향 프로그래밍에 대한 개념도 조금씩 익히고 있습니다.

변수와 상수

변수

  • 값을 언제든지 변경할 수 있습니다.
  • 어떠한 값을 담는 그릇이라고 보면 됩니다.
  • 변수를 사용하기 위해서는 어떤 형태의 자료를 저장할 것인지 결정 해야 합니다.
  • 변수명은 의미 있는 이름으로 지어야 하고 예약어를 사용할 수 없으며 Camel Case 를 따릅니다.
  • 먼저 선언된 변수는 또 같은 이름으로 선언할 수 없습니다.

상수

  • 상수는 한 번 값을 할당하면 변경할 수 없는 변수입니다.
  • final 키워드를 사용하여 상수를 선언합니다.
  • 주로 변하지 않아야 하는 값이나 프로그램 전체에서 공통으로 사용되는 값에 활용됩니다.
  • 상수는 대문자와 언더바를 사용하여 명명하는 것이 관례입니다.

데이터 타입

기본형 타입

기본형 타입은 간단한 데이터를 저장하는 데 사용되며, 크게 정수, 실수, 문자, 논리 등의 유형으로 나뉩니다.

  1. 정수형 (Integer Types):
    • byte: 8비트 부호 있는 정수를 표현합니다. -128부터 127까지의 값을 가집니다.
    • short: 16비트 부호 있는 정수를 표현합니다. 대략 -32,768부터 32,767까지의 값을 가집니다.
    • int: 32비트 부호 있는 정수를 표현합니다. 대략 -2,147,483,648부터 2,147,483,647까지의 값을 가집니다.
    • long: 64비트 부호 있는 정수를 표현합니다. 대략 -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지의 값을 가집니다.
  2. 실수형 (Floating-Point Types):
    • float: 32비트 부동 소수점을 표현합니다. 대략 -3.4E38에서 3.4E38까지의 범위를 가집니다.
    • double: 64비트 부동 소수점을 표현합니다. 대략 -1.7E308에서 1.7E308까지의 범위를 가집니다.
  3. 문자형 (Character Type):
    • char: 16비트 유니코드 문자를 표현합니다. 유니코드 기준으로 모든 문자를 표현할 수 있습니다.
  4. 논리형 (Boolean Type):
    • boolean: 논리값인 true 또는 false를 표현합니다. 주로 조건문과 논리 연산에 사용됩니다.

참조형 타입

참조형 타입은 객체의 주소를 저장하거나 객체에 대한 참조를 담는 데 사용됩니다. 이들은 기본형 타입과 달리 실제 데이터가 아닌 참조만을 저장합니다.

  1. 클래스 (Class):
    • 사용자가 직접 정의한 데이터 타입. 객체를 생성하기 위한 설계도 역할을 합니다.
  2. 인터페이스 (Interface):
    • 메소드의 집합을 정의한 추상 데이터 타입. 클래스가 여러 인터페이스를 구현할 수 있습니다.
  3. 배열 (Array):
    • 동일한 자료형의 데이터를 순서대로 저장하는 자료구조.
  4. 열거형 (Enum):
    • 서로 연관된 상수들의 집합. 주로 제한된 값 중에서 선택하는 경우에 사용됩니다.
  5. 기타 참조형 타입 (Other Reference Types):
    • 자바에서 제공하는 여러 클래스와 인터페이스들도 참조형 타입에 속합니다.
    • 예) 문자열 클래스 String

형변환

  1. 묵시적 형변환(자동 형변환):
    • 크기가 작은 자료형에서 큰 자료형으로의 형변환을 자동으로 처리합니다.
    • 데이터 손실이 없는 방향으로만 가능합니다.
    • 예를 들어, int에서 long으로, float에서 double으로의 형변환이 묵시적으로 처리됩니다.
  1. 명시적 형변환(강제 형변환):
    • 크기가 큰 자료형에서 작은 자료형으로의 형변환은 명시적으로 지정해야 합니다.
    • 데이터 손실이 발생할 수 있으므로 주의가 필요합니다.
    • 형변환을 위해 괄호 안에 목표 자료형을 명시합니다.

여러가지 연산자

산술 연산자

  • + (덧셈): 두 피연산자를 더합니다.
  • – (뺄셈): 왼쪽 피연산자에서 오른쪽 피연산자를 뺍니다.
  • * (곱셈): 두 피연산자를 곱합니다.
  • / (나눗셈): 왼쪽 피연산자를 오른쪽 피연산자로 나눕니다.
  • % (나머지): 왼쪽 피연산자를 오른쪽 피연산자로 나눈 나머지를 반환합니다.

증감 연산자

  • ++ (증가): 피연산자의 값을 1 증가시킵니다.
  • – – (감소): 피연산자의 값을 1 감소시킵니다.

관계 연산자

  • == (동등): 두 피연산자가 같으면 true, 아니면 false를 반환합니다.
  • != (부등): 두 피연산자가 다르면 true, 같으면 false를 반환합니다.
  • > (초과): 왼쪽 피연산자가 오른쪽 피연산자보다 크면 true, 아니면 false를 반환합니다.
  • < (미만): 왼쪽 피연산자가 오른쪽 피연산자보다 작으면 true, 아니면 false를 반환합니다.
  • >= (이상): 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 true, 아니면 false를 반환합니다.
  • <= (이하): 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 true, 아니면 false를 반환합니다.

논리 연산자

  • && (논리 AND): 양쪽 피연산자가 모두 true이면 true를 반환합니다.
  • || (논리 OR): 양쪽 피연산자 중 하나라도 true이면 true를 반환합니다.
  • ! (논리 NOT): 피연산자의 논리 상태를 반전시킵니다.

비트 연산자

  • & (비트 AND): 각 비트별로 AND 연산을 수행합니다.
  • | (비트 OR): 각 비트별로 OR 연산을 수행합니다.
  • ^ (비트 XOR): 각 비트별로 XOR(배타적 OR) 연산을 수행합니다.
  • ~ (비트 NOT): 각 비트를 반전시킵니다.

시프트 연산자

  • << (왼쪽 시프트): 왼쪽 피연산자의 비트를 왼쪽으로 이동시킵니다.
  • >> (오른쪽 시프트): 왼쪽 피연산자의 비트를 오른쪽으로 이동시킵니다. 부호 비트는 유지됩니다.
  • >>> (부호 없는 오른쪽 시프트): 왼쪽 피연산자의 비트를 오른쪽으로 이동시키며, 부호 비트는 0으로 채웁니다.

할당 연산자

  • = (할당): 변수에 값을 할당합니다.
  • +=, -=, *=, /=, %= 등 (복합 할당): 현재 변수 값과 다른 값을 연산한 후, 결과를 변수에 할당합니다.

삼항 연산자

  • 조건이 참이면 첫 번째 피연산자를 반환하고 거짓이면 두 번째 피연산자를 반환합니다. 일반적인 형식은 다음과 같습니다.
  • 조건식 ? 참일 때 값 : 거짓일 때 값;

조건문

if 문

if 문은 가장 간단한 형태의 조건문으로, 주어진 조건이 참인 경우에만 특정 블록의 코드를 실행합니다. 조건이 거짓이면 해당 블록은 건너뛰고 아무 동작도 수행하지 않습니다.

Java
int x = 10;
if (x > 5) {
    System.out.println("x는 5보다 큽니다.");
}
Java

if else 문

if-else 문은 if의 조건이 참이면 if 블록을 실행하고, 조건이 거짓이면 else 블록을 실행합니다. 따라서 두 가지 경우 중 하나는 반드시 실행됩니다.

Java
int y = 8;
if (y % 2 == 0) {
    System.out.println("y는 짝수입니다.");
} else {
    System.out.println("y는 홀수입니다.");
}
Java

else if 문

여러 개의 조건을 순차적으로 검사하며, 첫 번째로 참이 되는 조건의 블록을 실행합니다. else if는 추가적인 조건을 검사하며, 모든 조건이 거짓일 경우 마지막 else 블록이 실행됩니다.

Java
int grade = 85;
if (grade >= 90) {
    System.out.println("A 학점");
} else if (grade >= 80) {
    System.out.println("B 학점");
} else if (grade >= 70) {
    System.out.println("C 학점");
} else {
    System.out.println("D 학점");
}
Java

switch 문

switch 문은 변수의 값에 따라 여러 개의 케이스를 비교하고, 일치하는 경우 해당 케이스의 블록을 실행합니다. break 문을 사용하여 각 케이스 블록의 실행을 중지합니다.

Java
int dayOfWeek = 3;
switch (dayOfWeek) {
    case 1:
        System.out.println("월요일");
        break;
    case 2:
        System.out.println("화요일");
        break;
    // ... 다른 케이스들 ...
    default:
        System.out.println("일요일");
}
Java

삼항 연산자

삼항 연산자는 간단한 조건을 한 줄로 표현할 때 사용됩니다. 조건이 참이면 첫 번째 피연산자를, 거짓이면 두 번째 피연산자를 반환합니다.

Java
int a = 5;
int b = 3;
int max = (a > b) ? a : b; // a가 b보다 크면 a, 그렇지 않으면 b
Java

반복문

for 반복문

Java
for (초기식; 조건식; 증감식) {
    // 반복 실행될 코드
}
Java
  • 설명:
    • 초기식: 반복문 진입 시 최초 한 번 실행되는 부분으로, 변수 초기화 등이 이루어집니다.
    • 조건식: 반복문이 실행될 조건을 검사합니다. 조건이 true인 동안 반복됩니다.
    • 증감식: 각 반복이 종료될 때마다 실행되며, 변수를 증가 또는 감소시킵니다.

while 반복문

Java
while (조건식) {
    // 반복 실행될 코드
}
Java
  • 설명:
    • 조건식: 반복문이 실행될 조건을 검사합니다. 조건이 true인 동안반복됩니다.
    • 초기식과 증감식은 사용자에게 맡겨지므로 주의가 필요합니다. (무한루프 주의)

do-while 반복문

Java
do {
    // 반복 실행될 코드
} while (조건식);
Java
  • 설명:
    • 조건식: 반복문이 실행될 조건을 검사합니다. 조건이 true인 동안 반복됩니다.
    • do 블록의 코드는 최소한 한 번은 실행되고, 그 후에 조건을 검사합니다.

중첩된 for 반복문

Java
for (초기식1; 조건식1; 증감식1) {
    // 외부 반복문 코드
    for (초기식2; 조건식2; 증감식2) {
        // 내부 반복문 코드
    }
}
Java
  • 외부 반복문(for): 외부의 반복문에서는 내부 반복문을 포함하고 있습니다.
  • 내부 반복문(for): 내부의 반복문은 외부 반복문이 한 번 실행될 때마다 전체 루프을 반복합니다.

마무리

이번 주 동안은 자바 기초에 집중하여 변수, 상수, 데이터 타입, 연산자, 조건문, 반복문 등의 기본적인 개념을 학습하였습니다. 자바스크립트에서 가져온 지식을 바탕으로 비교적 수월하게 학습을 진행하고 있습니다.

변수와 상수에 대해서는 값의 변경 여부와 명명 규칙에 주목하였습니다. 데이터 타입은 기본형과 참조형으로 나누어 다양한 형태의 데이터를 다룰 수 있음을 알게 되었습니다. 또한, 형변환을 통해 데이터 타입 간 변환에 유의해야 함을 이해하였습니다.

다양한 연산자들과 그 활용법, 그리고 조건문과 반복문을 통해 효과적인 프로그래밍을 위한 도구를 학습하였습니다. 특히, for 반복문을 이용한 반복 작업과 조건문을 활용한 프로그램의 흐름 제어에 대해 깊게 이해하였습니다.

이러한 기초 지식을 바탕으로 꾸준한 학습을 통해 높은 수준의 개발 역량을 키워나가고자 합니다. 다음 주에는 객체지향 프로그래밍과 더 나아가 자바의 고급 기능들을 공부할 계획입니다. 개발일지를 작성하며 학습한 내용을 정리하는 것이 지속적인 성장에 도움이 될 것으로 기대됩니다.

Leave a Comment