Languages/Java 23

[HUFS/객체지향프로그래밍] #13 입출력 스트림

입출력 스트림 스트림(Stream): 자바의 데이터 입출력 흐름으로, 스트림 방향에 따라 종류 결정 바이트 기반 스트림: 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력 문자 기반 스트림: 문자 데이터를 읽고 출력 바이트 기반 스트림 1. 바이트 출력 스트림: OutputStream 2. 바이트 입력 스트림: InputStream 반환된 4byte 중 마지막 1byte에만 데이터 포함 입력 스트림으로부터 바이트를 더 읽을 수 없다면 -1 반환 읽을 수 있는 마지막 바이트까지 반복해 1byte씩 읽기 가능 문자 기반 스트림 1. 문자 출력 스트림: Writer 2. 문자열 입력 스트림: Reader 반환된 4byte 중 마지막 2byte에 데이터 포함 반환된 int 값을 char 타입으로 변환해 문자 ..

Languages/Java 2023.01.10

[HUFS/객체지향프로그래밍] #12 컬렉션 프레임워크

컬렉션 프레임워크 java.util 패키지에서 객체 관리를 위해 제공하는 인터페이스와 구현 클래스를 컬렉션 프레임워크라 한다 List 컬렉션 배열과 비슷하게 객체를 인덱스로 관리 저장 용량이 자동으로 증가하며 객체 저장 시 자동 인덱스 부여 객체의 추가/삭제/검색을 위한 다양한 메소드 제공 객체 자체를 저장하는 것이 아닌 객체의 번지를 참조 (중복 저장 가능) Set 컬렉션 List 컬렉션과 달리 객체의 저장 순서가 유지되지 않음 객체를 중복하여 저장할 수 없고 하나의 null만 저장 가능 HashSet, LinkedHashSet, TreeSet 등으로 활용 Map 컬렉션 key와 value로 구성된 Map.Entry 객체를 저장하는 구조 Entry는 Map 인터페이스 내부에 선언된 중첩 인터페이스 ke..

Languages/Java 2023.01.09

[HUFS/객체지향프로그래밍] #11 스레드

스레드 실행 중인 하나의 애플리케이션을 프로세스(process)라고 하며, 애플리케이션이 실행되면 운영체제로부터 실행에 필요한 메모리를 할당 받아 코드를 실행한다 운영 체제는 CPU 및 메모리 자원을 병렬로 할당하는 멀티 태스킹이 가능한데, 각 프로세스는 순차적으로 실행할 코드 이름인 스레드(thread)를 병렬로 실행할 수 있다 메인 스레드 모든 자바 애플리케이션은 메인 스레드가 main() 메소드를 실행하며 시작된다 작업 스레드 멀티 스레드 애플리케이션을 개발하려면 몇 개의 작업을 병렬로 실행할 지 결정한 뒤 각 작업별로 클래스를 상속/생성해서 작업 스레드를 객체화해 사용해야 한다 동기화 메소드 멀티 스레드 프로그램에서 스레드들이 객체를 공유해 작업하면 예상치 못한 결과가 나올 수 있다 스레드가 사용..

Languages/Java 2023.01.06

[HUFS/객체지향프로그래밍] #10 기본 API 클래스

자바 API 도큐먼트 공식 문서에서 자주 사용되는 클래스 및 인터페이스 API를 찾아 사용🔽 Overview (Java SE 19 & JDK 19) This document is divided into two sections: Java SE The Java Platform, Standard Edition (Java SE) APIs define the core Java platform for general-purpose computing. These APIs are in modules whose names start with java. JDK The Java Development Kit (JDK) AP docs.oracle.com Object 클래스 equals() 메소드의 매개 변수 타입은 Object인..

Languages/Java 2023.01.06

[HUFS/객체지향프로그래밍] #9 예외 처리

예외와 예외 클래스 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 발생하는 프로그램 오류를 예외(exception)라고 하며, 예외 처리 프로그램으로 정상 실행 상태를 유지해야 한다 * 개발자의 경험에 의해 예외 처리 코드 작성, 없을 경우 프로그램 강제 종료 일반 예외: 컴파일러가 체크하는 예외로, 컴파일 과정에 해당 예외 처리 코드가 있는지 검사 실행(runtime) 예외: 컴파일러가 체크하지 않는 예외로, 검사 없이 실행 시 예측 없이 갑자기 발생 NullPointerException: 가장 빈번하게 발생하는 실행 예외로, 객체 참조가 없는 상태의 참조 변수로 객체 접근 연산자를 사용할 경우 발생 ArrayIndexOutOfBoundsException: 배열에서 인덱스 범위를 초과할 경우 발생..

Languages/Java 2023.01.04

[HUFS/객체지향프로그래밍] #8 중첩 클래스와 중첩 인터페이스

중첩 클래스 클래스 내부에 선언한 클래스를 중첩 클래스(nested class)라 하며, 클래스 내부에 선언한 인터페이스를 중첩 인터페이스(nested interface)라 한다 내장 클래스는 외부 클래스의 멤버가 private이어도 접근 가능 내장 클래스는 외부로부터 보이지 않고 철저하게 숨겨 짐 익명 클래스로 콜백 메소드를 편리하게 작성 가능 클래스의 멤버로서 선언되는 중첩 클래스를 멤버 클래스라고도 하며, 메소드 내부에서 선언되는 중첩 클래스는 로컬 클래스라 한다 (메소드가 종료되면 사라짐) static 키워드 없이 중첩 선언된 클래스를 인스턴스 멤버 클래스라 하며, 정적 필드와 메소드가 아닌 인스턴스 필드와 메소드만 선언 가능하다 반면 static 키워드로 선언된 정적 멤버 클래스는 모든 종류의 ..

Languages/Java 2023.01.04

[HUFS/객체지향프로그래밍] #7 인터페이스

인터페이스 선언 코드는 인터페이스(interface)를 통해 객체와 서로 통신해 코드 수정 없이 객체 교환이 가능하다 인터페이스는 클래스와 유사하나 객체를 생성할 수 없어 생성자를 가질 수 없다 인터페이스 예시 package sec01.exam03; public interface RemoteControl { //상수 int MAX_VOLUME = 10; int MIN_VOLUME = 0; //추상 메소드 void turnOn(); void turnOff(); void setVolume(int volume); } 인터페이스의 구현과 사용 인터페이스에서 정의된 추상 메소드를 재정의해서 실행 내용을 가지고 있는 클래스를 구현(implement) 클래스라 하며, 클래스 선언부에 implements 키워드와 인터..

Languages/Java 2023.01.03

[HUFS/객체지향프로그래밍] #6 상속

클래스 상속 이미 개발된 클래스를 상속(재사용)시켜 새로운 클래스를 만들기에 중복되는 코드를 줄일 수 있다 여러 개의 부모를 한 번에 상속받을 수 없음 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드 상속 제외 부모와 자식 클래스의 패키지가 다를 경우 default 접근 제한을 갖는 필드와 메소드 상속 제외 super를 사용해 자식 생성자에서 부모 생성자 호출 예시 package sec01.exam02; public class People { public String name; public String ssn; public People(String name, String ssn) { this.name = name; this.ssn = ssn; } } package sec01.exam02; ..

Languages/Java 2022.12.30

[HUFS/객체지향프로그래밍] #5 클래스

객체 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지며 식별 가능한 것을 객체(Object)라고 하며, 이는 속성(필드)과 동작(메소드)로 구성된다 집합 관계: 부품과 완성품의 관계 사용 관계: 객체 간의 상호작용 상속 관계: 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성 객체 지향 프로그래밍: 집합/사용 관계에 있는 객체들을 설계/조립하여 프로그램 개발 클래스(Class)는 객체의 설계도라고 할 수 있으며 인스턴스(Instance)는 클래스로부터 만들어진 객체이다 클래스 선언 보통 객체를 구상한 후 클래스 이름을 결정하는데 다음과 같은 명명 규칙을 따른다 하나 이상의 문자로 이루어질 것 첫 글자에는 숫자가 올 수 없음 $, _외의 특수 문자는 사용할 수 없음 자바 ..

Languages/Java 2022.12.30

[HUFS/객체지향프로그래밍] #4 참조 타입

기본 타입과 참조 타입 기본 타입(primitive type): 정수, 실수, 논리, 문자 리터럴 저장 참조 타입(reference type): 배열, 열거, 클래스, 인터페이스 (객체의 번지를 참조) 메모리 사용 영역 메모리 사용 영역(Runtime Data Area)은 메소드 / 힙 / JVM 스택 영역으로 나뉜다 메소드 영역(Method Area): 클래스별로 정적 필드, 상수, 생성자, 메소드 등을 분류해 저장 힙 영역(Heap Area): 객체와 배열이 생성되는 영역 JVM 스택 영역: 메소드가 호출되면 프레임이 추가되고 메소드가 종료되면 프레임이 제거 null과 NullPointerException 참조 타입 변수는 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있는데, 이 또한 스택..

Languages/Java 2022.12.27