728x90
반응형

전공/객체지향프로그래밍 17

[객체지향프로그래밍] 자바 데이터 베이스 관리 프로그래밍 실습

프로젝트 소개 오늘은 제가 최근에 진행한 자바 실습 프로젝트에 대해 소개하려고 합니다. 이 프로젝트는 데이터베이스의 생성, 조회, 수정, 삭제 등의 작업을 효율적으로 처리하는 시스템을 개발하는 것이 목표입니다. 프로그램의 테스트 케이스로는 도서 관리 시스템을 작동시켜 보았습니다. 프로젝트 구조 및 파일 설명 프로젝트는 다음과 같은 구조로 이루어져 있습니다. src/database 폴더: 데이터베이스 관련 파일들을 포함하는 폴더 TableImpl.java: 테이블 구현을 담당하는 클래스 Table.java: 테이블 인터페이스를 정의한 클래스 JoinColumn.java: 조인할 칼럼을 나타내는 클래스 Joinable.java: 조인 가능한 엔티티를 나타내는 인터페이스 Database.java: 데이터베이스..

[객체지향프로그래밍][Java] Nested Classes

Nested Classes 중첩 클래스 다른 클래스의 범위 내에서 정의되는 클래스 클래스의 특성, 멤버의 특성 모두 가짐 접근 지정자 4가지 전부 사용 가능 class OuterClass { class InnerClass { //필드 // static 멤버 가질 수 없음 } static class StaticNestedClass { // 필드 // 모든 멤버 가질 수 있음 } } class OuterClass2 { // static InnerClass a = new InnerClass(); static StaticNestedClass b = new StaticNestedClass(); InnerClass c = new InnerClass(); StaticNestedClass d = new StaticNe..

[객체지향프로그래밍][Java] Exception Handling

Exception 종류 실행 중에 예기치 않은 상황이 발생할 때 사용 Exception 클래스와 그 하위 클래스 예외는 크게 두 가지 유형으로 분류 - Checked Exception, Unchecked Exception Checked Exception 컴파일러에 의해 강제로 처리해야 하는 예외 반드시 try-catch 블록이나 throws 절로 예외 처리 Unchecked Exception RuntimeException 클래스와 그 하위 클래스 프로그램의 실행 중에 예기치 않은 상황에 발생 예외가 발생하면 JVM이 예외를 캐치하여 적절한 예외 처리 코드를 실행하거나, 예외를 런타임 환경으로 전파하여 프로그램의 실행을 중단 예외 전파 main - f1 - f2 - f3 f3에서 예외 발생 시 f3은 비정..

[객체지향프로그래밍][Java] Object Cloning

clone() of Object 함수 원형 protected Object clone() throws CloneNotSupportedException Shallow Copy 객체를 복제할 때, 원본 객체와 복제 객체는 동일한 객체를 참조 즉, 객체 내부에 참조 타입 필드가 있는 경우, 해당 필드의 참조는 동일하게 유지 변경이 한쪽 객체에 영향을 미칠 수 있음 Deep Copy 객체를 복제할 때, 원본 객체와 복제 객체는 서로 독립적인 객체를 참조 즉, 참조 타입 필드의 복사본도 생성되어 변경이 한 쪽 객체에 영향을 주지 않음 Cloneable 인터페이스 Cloneable 인터페이스는 객체가 복제 가능함을 나타내기 위해 구현해야 함 이 인터페이스를 구현하지 않은 객체는 clone() 메서드를 호출할 때 Cl..

[객체지향프로그래밍][Java] Initialization (정적 초기화 블록, 인스턴스 초기화 블록)

정적 초기화 블록 static { // 정적 멤버 변수 초기화 코드 } 실행 타이밍: 정적 초기화 블록은 클래스가 로드될 때 한 번만 실행(해당 클래스의 첫 번째 인스턴스를 생성하기 전) 실행 순서: 클래스 내에 정의된 순서대로 정적 초기화 블록이 실행 예외 처리: 정적 초기화 블록 내에서 발생하는 예외는 명시적으로 처리해야 함 멤버 변수 초기화: 정적 초기화 블록은 주로 정적(static) 멤버 변수를 초기화하는 데 사용, 이 블록 내에서 정적 멤버 변수에 값을 할당할 수 있으며, 복잡한 초기화 로직이 필요한 경우에 유용하게 사용됨 예시 1 public class Main { public static void main(String[] args) { System.out.println("Cls.field1..

[객체지향프로그래밍][Java] Generics 심화 내용

Generics 제네릭의 사용 이유 컴파일 시간 단축 캐스트의 제거 Generics class, interface // raw type Box class public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } } // generic type Box class public class Box { private T t; public void set(T t) { this.t = t; } public T get() { return t; } } 클래스 또는 인터페이스의 이름 뒤에 를 통해 타입 매개변수를 지정할 수 있음 타입 ..

[객체지향프로그래밍][Java] Queue 심화 내용

Interface Queue Queue는 인터페이스 Collection 상속 메소드 기능 boolean add(E e) e를 큐에 삽입, 성공시 true 반환 용량을 초과한 경우 IllegalStateException 발생 E element() 큐의 head 반환 큐가 비어있으면 예외 발생 boolean offer(E e) e를 큐에 삽입, 성공시 true 반환 용량을 초과한 경우 false 반환 E peek() 큐의 head 검색 큐가 비어있으면 null반환 E poll() 큐의 head 검색 및 삭제 큐가 비어있으면 null 반환 E remove() 큐의 head 삭제 큐가 비어있으면 예외 발생 Queue는 선입선출 방식으로 원소를 저장 head에서는 remove, poll로 인해 삭제가 일어남 re..

[객체지향프로그래밍][Java] Set 심화 내용(HashSet, TreeSet)

Set HashSet HashSet은 인터페이스 Set의 구현 클래스 Enhanced for문 사용 가능 랜덤 위치에 원소가 저장되므로 입력한 순서에 상관없이 원소가 출력됨 Set는 원소 중복 허용 x Set 원소 중복 import java.util.*; class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } @Override public String toString() { return "Point(" + x + "," + y + ")"; } // @Override // public boolean equals(Object obj) { // Point p = (Point) obj; // if (x == p.x && y =..

[객체지향프로그래밍][Java] List 심화 내용(Iterator)

List Enhanced for문 사용 // list가 초기화 되어있다고 가정 for(String str: list) { System.out.println(str); } // 위쪽 코드와 같은 기능 for(Iterator i = list.Iterator; i.hasNext(); ) { System.out.println(str); } Interface Iterable 메소드 기능 Iterator iterator() 타입의 반복자 리턴 public interface ListIterator extends Iterator 메소드 기능 void add(E e) 리스트에 원소를 더함 boolean hasNext() 리스트 반복자가 가리킬 다음 원소가 있으면 true boolean hasPrevious() 리스트 ..

[객체지향프로그래밍][Java] 모듈과 패키지 개념 (Object, Wrapper, Integer, String, StringBuffer, StringTokenizer, Math, Calendar)

패키지 서로 관련된 클래스와 인터페이스의 컴파일 된 클래스 파일들을 하나의 디렉터리에 묶어 놓은 것 패키지 사용하기 import 사용 x - 소스 내에서 패키지 이름과 클래스 이름의 전체 경로명을 써주어야 함 java.util.Scanner import 사용 - 소스의 시작 부분에 사용하려는 패키지 명시(클래스만 명시) import java.util.Scanner; // 특정 클래스의 경로명만 포함 import java.util.*; // 패키지 내의 모든 클래스 포함 패키지 만들기 패키지 선언 package 패키지명; - 컴파일한 클래스 파일을 패키지명의 디렉터리에 저장하라는 명령 - 소스 파일의 첫 줄에 선언 - 클래스의 경로명은 "패키지명.클래스명" 디폴트 패키지와 패키지 특징 디폴트 패키지 - p..

728x90
반응형