Java 107

객체지향 프로그래밍이란?

객체지향 프로그래밍의 핵심 개념은 다음 문장으로 요약할 수 있습니다."실세계(real world)의 일들을 객체를 사용해서 모델링하는 것" 실세계를 코드로 모델링한다는 의미는?우리가 살고 있는 현실 세계에는 수많은 '사물'과 '행동'이 있습니다. 예를 들어 자동차, 엘리베이터, 자전거, 사용자, 주문서 등은 모두 각자의 상태(예: 속도, 층수, 색상 등)와 동작(예: 출발, 정지, 탑승 등)을 가지고 있죠.이러한 현실 세계의 요소들을 그대로 프로그램 속에서도 ‘객체’라는 단위로 표현해서, 복잡한 문제를 현실처럼 직관적으로 처리하는 것이 객체지향 프로그래밍입니다. 객체(Object)란?객체는 프로그래머가 모델링하고자 하는 현실의 어떤 사물이나 개념을 표현한 것입니다.객체는 두 가지 구성요소로 이루어집니다:..

Java 2025.07.22

구조체 생성

Exam[] exams = new Exam[3]; 이 코드의 의미와 작동 방식이 코드가 하는 일Exam[] exams = new Exam[3];이 코드는 Exam 객체 3개를 만드는 것이 아닙니다.이것은 Exam 객체를 저장할 수 있는 참조(주소) 3개를 담을 수 있는 배열만 만들 뿐입니다.즉, exams[0], exams[1], exams[2]는 null 값으로 초기화되어 있습니다.아직 각각의 Exam 객체는 존재하지 않습니다.쉽게 말해, 비어 있는 사물함 3칸을 만든 것과 같습니다. 책(Exam 객체)은 아직 없습니다. 이 상태에서 아래처럼 하면 오류 납니다exams[0].kor = 30; // ❌ NullPointerException 발생이유: exams[0]은 아직 아무 객체도 참조하고 있지 않습..

Java 2025.07.22

데이터 구조화

"매개변수 나열"보다 "데이터 구조화"가 좋은 이유문제 상황다음과 같은 메서드를 생각해봅시다:void drawEllipse(int x, int y, int w, int h, int color)이 메서드는 타원을 그리기 위해 필요한 정보를 다섯 개의 변수로 받습니다:x: 타원의 중심 X좌표y: 타원의 중심 Y좌표w: 너비h: 높이color: 색상이렇게 매개변수를 나열하면 문제점이 생깁니다:매개변수가 많아질수록 가독성이 떨어집니다.실수로 매개변수 순서를 잘못 넣어도 컴파일 에러가 발생하지 않아 위험합니다.이 다섯 개가 사실상 "타원 하나"를 구성하는 속성이라면, 이걸 하나로 묶는 것이 더 자연스럽습니다. 개선 방법: 클래스로 묶기class Ellipse { int x, y, w, h, color; }이제 E..

Java 2025.07.22

Scanner.nextInt()

Integer.parseInt(scan.nextLine())Scanner scan = new Scanner(System.in);System.out.print("숫자 입력: ");int num = Integer.parseInt(scan.nextLine()); // "123\n" → "123" → 123123 입력하고 Enter 치면 잘 동작.줄바꿈도 제거돼서 이후 입력도 문제 없음. scan.nextInt() + nextLine()Scanner scan = new Scanner(System.in);System.out.print("숫자 입력: ");int num = scan.nextInt(); // 123만 읽고 '\n' 남김System.out.print("이름 입력: ");String name =..

Java 2025.07.22

산술 연산자

묵시적 형변환 (자동 변환)코드byte x = 1; int y = x;설명byte x = 1;x는 byte형입니다. 1바이트(8비트) 크기이고, 값은 00000001 (2진수)로 저장됩니다.int y = x;x를 int형 변수 y에 대입합니다.이때 작은 타입(byte)에서 큰 타입(int)으로 자동으로 형 변환이 일어납니다.Java에서는 데이터 손실이 없기 때문에 컴파일러가 자동으로 변환해 줍니다.결과적으로 y에는 00000000 00000000 00000000 00000001 이라는 4바이트 크기의 정수가 저장됩니다.즉, 묵시적 형변환은 작은 타입에서 큰 타입으로 갈 때 자동으로 일어납니다.(byte → short → int → long → float → double) 명시적 형변환 (강제 변환)코드..

Java 2025.07.19

Scanner

Scanner가 FileInputStream을 통해 데이터를 읽는 구조코드FileInputStream fis = new FileInputStream("res/kors.txt");Scanner scan = new Scanner(fis);fis: 파일에서 1바이트씩 읽어올 수 있는 입력 스트림scan: 입력 스트림을 이용해 문자열 단위 또는 숫자 단위로 읽을 수 있는 고수준 클래스흐름 설명kors.txt 안에는 "70 80"이라는 텍스트가 저장되어 있음해당 텍스트는 내부적으로 ASCII 코드로 아래와 같이 저장됨: 문자 ASCII '7'55'0'48' ' (공백)32'8'56'0'48따라서 FileInputStream이 읽어오는 순서:55 48 32 56 48('7''0'' ''8''0')Scanner는..

Java 2025.07.19

파일 입력 스트림

파일 내용 확인tks.txt 파일 내용:80 90 100※ 텍스트 파일에는 문자열로 숫자가 들어있고, 이 숫자들은 사람이 보기 좋게 공백으로 구분되어 있습니다. 코드 설명FileInputStream fis = new FileInputStream("res/kors.txt"); int code = fis.read(); // 1바이트만 읽기FileInputStream은 파일에서 바이트 단위로 데이터를 읽는 스트림입니다.fis.read()는 한 바이트(=한 글자)를 읽고, 그 바이트의 아스키 코드 값을 int로 반환합니다.이 코드에서는 첫 글자인 '8'을 읽고, 이는 아스키 코드 값 56입니다. System.out.println(code);System.out.println(code); // 출력: 56code에..

Java 2025.07.19

버퍼와 스트림

스트림(Stream)이란?스트림이란 말 그대로 "데이터의 흐름 통로"입니다.자바에서 스트림은 입력(Input) 또는 출력(Output) 작업을 할 때 데이터를 연속적으로 흘려보내는 방식을 의미합니다.예시:OutputStream os = new FileOutputStream("data.txt");os.write(65); // 문자 'A'를 파일에 씀위 코드는 data.txt라는 파일로 바이트 데이터를 흘려보내는 통로를 만든 것입니다. 스트림의 특징단방향입니다.→ 입력 스트림은 읽기 전용, 출력 스트림은 쓰기 전용입니다.연속적이고 일회용입니다.→ 데이터를 한 번 흘려보내면 끝. 이미 지난 데이터는 다시 읽거나 쓸 수 없습니다.자체적으로 데이터를 저장하지 않음→ 스트림은 단순히 흐름만 제공하지, 데이터를 잠시..

Java 2025.07.19

PrintStream 객체

전체 구조 요약PrintStream fout = new PrintStream(fos);fout: PrintStream 객체 (문자 출력용)fos: FileOutputStream 객체 (바이트 출력용)fout은 내부적으로 fos를 감싸고 있습니다. 즉, PrintStream이 바깥쪽에 있고, 최종적으로 FileOutputStream이 파일로 출력합니다. 입력 데이터fout.print(70); fout.printf("%d %d", 70, 80);70과 80이라는 숫자를 fout을 통해 출력합니다.하지만 PrintStream은 숫자를 그대로 70, 80 바이트 값으로 저장하지 않고,👉 "문자 '7', 문자 '0'"처럼 문자열로 바꿔서 저장합니다. 버퍼 내부 모습 (이미지 왼쪽 박스)'7' '0' ' ' '8..

Java 2025.07.19

문자열과 문자열 객체

문자열 저장 방식: C 언어 vs Java"Hello"는 문자 'H', 'e', 'l', 'l', 'o', 그리고 마지막에 널 종료 문자 '\0'를 포함하여 저장됩니다."World!"도 마찬가지입니다.이 방식은 C언어 스타일 문자열로, 널 문자 \0를 만나면 문자열이 끝난다는 규칙을 따릅니다.정리C언어 스타일 문자열: 문자 배열 + 종료 문자 \0자바의 String은 이와 다름 → 객체로 관리 Java에서의 문자열 객체 구조new String("Hello")를 통해 생성된 문자열 객체는 객체 내부에 char 배열을 갖고 있습니다.이 객체는 다양한 메서드(length(), substring(), charAt() 등)를 통해 문자열을 다룰 수 있습니다.정리자바의 문자열은 객체로 다루며, 내부에 문자 배열을 ..

Java 2025.07.18