오늘 학원 수업은 Java 기초 파트였다. 이미 알고 있는 내용이었기 때문에, 개념 설명보다는 전체 흐름을 다시 정리하는 데 초점을 맞췄다.
변수, 자료형, 연산자처럼 자주 사용하는 요소들은 정확한 동작 방식이 기준이 되기 때문에, 한 번쯤은 구조적으로 정리해 두는 게 필요하다고 생각했다.
Java는 객체 지향 프로그래밍(OOP) 언어이며, “Write Once, Run Anywhere” 철학을 기반으로 설계되었다.
Java 코드는 컴파일되면 바이트코드로 변환되고, 이 바이트코드는 JVM(Java Virtual Machine) 위에서 실행된다. 이 구조 덕분에 운영체제나 하드웨어 환경에 대한 의존성이 낮다.
시험이나 이론에서 자주 언급되는 “플랫폼 독립성”이라는 표현도 결국 JVM 실행 구조를 전제로 한 개념이다.
주석은 컴파일 과정에서 무시되며, 코드 실행에는 영향을 주지 않는다. 코드의 의도나 맥락을 남기기 위한 용도로 사용된다.
/*
주석(comment)
- 컴파일 시 무시됨
- 코드 설명 및 기록 용도
1) 한 줄 주석 : //
2) 다중 주석 : /* */
3) Ctrl + /
*/
System.out.println("안녕하세요");
System.out.println(1);
System.out.println('1');
System.out.println("1");
값을 직접 출력문에 넣는 방식은 하드코딩에 해당한다. 간단한 테스트에는 사용할 수 있지만, 코드가 길어질수록 관리하기 어려워진다.
일반적으로는 값을 변수에 담고, 변수를 통해 출력하는 방식이 적합하다.
변수는 데이터를 저장하기 위한 공간이다. 선언, 초기화, 재대입의 개념이 구분된다.
int scoreEnglish = 100; // 선언 + 초기화
System.out.println(scoreEnglish);
int scoreKorean; // 선언
scoreKorean = 99; // 초기화
System.out.println(scoreKorean);
scoreEnglish = 50; // 재대입
재대입 시에는 자료형을 다시 명시하지 않는다.
int result;
int myTestResult;
Python의 snake_case와 대비되는 부분이다.
char는 단일 문자, String은 문자열을 의미한다. 출력이나 연산 시 동작 방식에 차이가 있다.
char name1 = '최';
char name2 = '병';
char name3 = '현';
System.out.println(name1 + name2 + name3);
System.out.println("" + name1 + name2 + name3);
출력문 내부에서 가장 먼저 등장한 자료형을 기준으로 연산 방식이 결정된다.
int width1 = 100;
int width2 = 200;
System.out.println(width1 + width2); // 300
String width3 = "100";
String width4 = "200";
System.out.println(width3 + width4); // 100200
문자열에서의 + 연산은 수학적 연산이 아니라 문자열 결합이다.
int a = 5;
int b = 2;
System.out.println(a / b); // 2
double result = (double) a / b;
System.out.println(result); // 2.5
자료형에 따라 연산 결과가 달라지므로, 의도에 맞게 형변환을 명시해야 한다.
int num1 = 1;
num1 += 2;
num1 -= 1;
num1 *= 10;
num1 /= 5;
가독성과 코드 간결성을 위해 자주 사용된다.
int j = 10;
System.out.println(j++);
System.out.println(++j);
int age = 20;
System.out.println("내년에는 " + age + 1 + "살이 됩니다.");
System.out.println("내년에는 " + (age + 1) + "살이 됩니다.");
문자열과 숫자가 함께 사용될 경우, 연산 우선순위를 명확히 해야 한다.
논리 연산자는 조건문에서 가장 자주 사용되는 연산자다.
true / false 값을 기준으로 동작하며,
boolean 자료형과 함께 사용된다.
내부적으로는 true를 1, false를 0처럼 처리한다고 이해하면 흐름이 명확하다.
/*
논리 연산자
true(1) / false(0)
boolean : true / false를 표현하는 자료형
AND(&&) : T x T = T / T x F = F / F x F = F
하나라도 false면 false
OR(||) : T + T = T / T + F = T / F + F = F
하나라도 true면 true
NOT(!) : true ↔ false 반전
*/
public class Operator02 {
public static void main(String[] args) {
boolean flag1 = true;
boolean flag2 = false;
System.out.println("----- && 연산자 -----");
boolean result1 = flag1 && flag1;
System.out.println("T x T = " + result1);
boolean result2 = flag1 && flag2;
System.out.println("T x F = " + result2);
boolean result3 = flag2 && flag2;
System.out.println("F x F = " + result3);
System.out.println("----- || 연산자 -----");
boolean result4 = flag1 || flag1;
System.out.println("T + T = " + result4);
boolean result5 = flag1 || flag2;
System.out.println("T + F = " + result5);
boolean result6 = flag2 || flag2;
System.out.println("F + F = " + result6);
조건문에서 자주 사용되는 연산자들이다.
Scanner scanner = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
System.out.println(name);
입력 → 변수 저장 → 출력 흐름을 확인했다. Scanner는 객체 생성과 메서드 호출 개념과 연결된다.
이번 내용은 Java 전반에서 계속 사용되는 기본 요소들이기 때문에, 형식적으로라도 한 번 정리해 두는 게 필요하다고 판단했다.
다음 단계에서는 입력과 조건문을 함께 사용하는 흐름에서 자료형과 연산자 처리에 집중할 예정이다.