전체 글 36

[05] 객체 직렬화

01. 객체 직렬화와 역직렬화1. 객체 직렬화 (Seriallzation)객체 직렬화란 메모리에 존재하는 객체를 바이트(byte) 형태로 변환하여 저장 및 전송할 수 있도록 만드는 과정을 의미한다. 이러한 객체 직렬화는 휘발성 메모리에 임시로 저장됐다가 사라지는 객체를 파일, 데이터베이스(DB), 네트워크 전송 데이터와 같은 외부 자원으로 변환할 때 사용된다. 대표적인 클래스 ObjectOutputStream객체를 바이트 스트림으로 변환하여 파일 등에 저장FileOutputStream실제 파일에 데이터를 기록하는 역할 import java.io.FileOutputStream;import java.io.ObjectOutputStream;public class SerializeExample { publ..

[04] File I/O 기초와 활용

01. 기본 File I/O 이해1. 파일 시스템(File System)파일 시스템이란 데이터를 디렉터리와 파일 단위로 저장 및 관리하는 구조를 의미한다. 파일은 바이트(byte) 단위로 구성되며, 하드디스크를 비롯한 SSD 등의 물리 저장 장치에 위치해있다. Java에서는 이러한 파일 시스템을 File 클래스를 통해 추상화하여 다룰 수 있다. 절대 경로(Absolute Path)상대 경로(Relative Path)정의루트 디렉토리부터 시작하는 전체 경로현재 작업 디렉토리 기준으로 표시하는 경로예시윈도우 [C:\myWs\project\test-file.txt]맥: [/home/user/project/test-file.txt][./test-file.txt] | [../images/logo.png] Fil..

[03] 제네릭 타입과 메서드

01. 제네릭 (Generic)제네릭이란 클래스나 메서드의 코드를 작성할 때, 타입을 구체적으로 지정하는 것이 아니라, 추후에 지정할 수 있도록 일반화해 두는 것을 의미한다. 즉, 작성한 클래스 또는 메서드의 코드가 특정 데이터 타입에 얽매이지 않게 해 둔 것을 뜻한다. 1. 제네릭 클래스 (Generic Class)이처럼 제네릭이 사용된 클래스를 제니릭 클래스라고 하며, 형식을 통해 클래스 내부에서 사용할 타입 파라미터를 선언할 수 있다. 하지만 모든 인스턴스가 공유하는 클래스 변수에는 제네릭을 사용할 수 없다. 왜냐하면 만약 제네릭을 통해 클래스 변수의 타입을 유동적으로 변환할 수 있도록 한다면, 그는 모든 인스턴스가 공유해야 하는 클래스 변수의 타입을 다르게 만들어 궁극적으로 모든 인스턴스가 해당..

[03] HashSet, 그리고 O(n)과 O(logn)

01. HashSet의 내부 동작 방식과 중복 제거 메커니즘1. 내부 동작 방식우선 HashSet은 내부적으로 HashMap 구조를 활용하여 데이터를 관리한다. HashMap과 마찬가지로 Key-Value 쌍으로 데이터를 저장할 뿐만 아니라, 사용자가 저장하려는 데이터를 Map의 Key 자리에 배치함으로써 중복을 방지한다. 즉, HashMap은 구조적으로 Key의 중복을 허용하지 않기 때문에, HashSet은 데이터를 Key에 저장함으로써 데이터의 유일성을 보장한다. 만약 사용자가 "codeit" 이라는 데이터를 HashSet에 저장할 때, 내부에서는 다음과 같은 프로세스가 진행된다. 내부 동작 방식 데이터의 주소화(Hashing)해시 함수를 통해 저장하고자 하는 데이터를 고유한 숫자 값인 해시 코드로..

[02] 주요 자료 구조

01. 자료구조의 정의와 필요성데이터(Data)란 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값을 의미한다. 그리고 이러한 데이터를 분석하고 정리하여, 궁극적으로 목적에 맞춰 데이터를 효율적으로 활용하기 위해 데이터를 체계적으로 정리하여 저장하는 데이터 공간을 자료 구조라고 한다. 효율적인 자료 구조는 빠르고 정확한 데이터 검색을 가능하게 할 뿐만 아니라, 데이터의 삽입 / 삭제 / 수정 연산의 효율을 증가시키고 메모리와 처리 시간 자원의 효율성을 극대화 시킨다. 02. 자료 구조의 분류 기준1. 선형 구조 vs 비선형 구조 선형 구조비선형 구조설명데이터가 일렬로 순차적으로 나열된 구조>> 이전 또는 다음 요소와 1:1로 연결데이터가 계층적(Tree) 또는 복잡한 관계(Grap..

[06] UML을 활용한 객체 지향 설계 시각화

01. UML (Unified Modeling Language) 개요 및 필요성UML이란 시스템을 시각적으로 표현하기 위한 표준화된 모델링 언어, 문서화, 기획을 의미한다. 즉, UML이란 소프트웨어 개발 과정에서 복잡한 구조나 동작을 그림으로 표현함으로써 설계의 이해도와 팀원들 간 의사소통을 향상시키는 도구를 뜻한다. 이러한 UML은 구조(Struct)와 동적 행동(Behavior)을 모두 다룰 수 있다. 1. UML을 사용하는 이유UML 사용 이유 시각적 이해복잡한 시스템을 시각적인 그림으로 표현함으로써 직관적인 이해를 도움팀 간 소통 및 협업 향상개발자, 기획자, 디자이너, QA 등 다양한 직군이 이해할 수 있는 공통 언어 역할 수행설계 오류 조기 발견코드 작성 전, 구조를 검증하여 논리적인 오류나..

[05] 예외 처리 (Exception Handling)

01. 예외1. 오류 vs 예외 오류(Error)예외(Exception)의미시스템 레벨에서 발생하는 치명적인 문제개발자가 처리할 수 있는 문제예시메모리 부족(OutOfMemoryError),스택 오버플로우(StackOverflowError)NullPointerException,IllegalArgumentException복구 가능 여부거의 불가능비교적 복구 가능처리 방법JVM 차원 처리개발자가 try-catch 등으로 처리 2. 예외 처리의 중요성예외 처리는 모든 프로그래밍 언어에서 매우 중요한 개념이다. 프로그램이 실행되는 동안 파일 부재, 네트워크 연결 실패, 잘못된 입력 제공, DB 연결 문제 등 다양한 상황이 발생하는데 이때 예외 처리가 없다면 프로그램은 즉시 종료되기 때문이다. 하지만 자바는 체계..

[04] 내부 클래스와 익명 클래스, 그리고 열거 타입(ENUM)의 활용

01. 내부 클래스 (Inner Class)1. 내부 클래스내부 클래스란 클래스 내부에 선언된 또 다른 클래스를 뜻한다. 내부 클래스는 외부 클래스 멤버에 자유롭게 접근할 수 있으며, 밀접하게 관련된 기능을 함께 묶어 설계하는 것을 돕는다. 또한 내부 클래스를 활용하면 코드의 응집도를 높이고 캡슐화를 강화할 수 있다. class Outer { // 외부 클래스 class Inner { // 인스턴스 내부 클래스 }} 2. 내부 클래스를 사용하는 이유내부 클래스를 사용하는 이유 외부 클래스와 밀접한 기능을 묶기 위해두 클래스가 강하게 연관된 관계라면 외부 클래스 내부에 클래스를 선언하는 것이 자연스러움캡슐화 (정보 은닉) 강화내부 클래스를 private, protected 로 선언하면 외부에서 접..

[03] SOLID 원칙

01. SOLID 원칙SOLID 원칙이란 객체 지향 설계에서 유지보수 가능하고 확장 가능한 코드를 만들기 위한 5가지 설계 원칙의 앞 글자를 모은 약어이다. 이러한 SOLID 원칙은 유지보수가 쉬운 코드 설계, 변경에 유연한 설계, 테스트하기 좋은 구조, 협업 시 충돌 최소화에 있어서 막대한 영향을 끼치기에 중요하다. 설계 원칙의 종류 단일 책임 원칙(SRP)하나의 클래스는 하나의 책임만 가져야 한다개방 / 폐쇄 원칙(OCP)확장에는 열려있고, 수정에는 닫혀있어야 한다.리스코브 치환 원칙(LSP)자식 클래스는 반드시 부모 클래스를 대체할 수 있어야 한다.인터페이스 분리 원칙(ISP)하나의 범용 인터페이스보다 다수의 구체적인 인터페이스가 낫다.클라이언트는 사용하지 않는 메서드에 의존하면 안 된다.의존성 역..

[02] 객체 지향 프로그래밍의 4가지 핵심 개념

01. 상속 (Inheritance)1. 상속상속이란 하위 클래스가 상위 클래스의 멤버(필드, 메서드 등)를 물려받아 사용할 수 있게 하는 구조를 의미한다. 즉, 상속이란 하위 클래스는 상위 클래스의 공통된 속성과 기능을 그대로 상속받고, 필요에 따라 자신의 고유한 기능을 추가로 정의하여 확장하거나 상위 메서드를 재정의(Override)할 수 있음을 뜻한다. 이러한 상속 관계는 자바에서 extends라는 키워드를 통해 명시하며, 상속의 구조상 하위 클래스는 상위 클래스의 모든 멤버를 포함하기 때문에, 하위 클래스가 가진 멤버의 개수는 언제나 상위 클래스보다 같거나 더 많다. // 1. 기본 형태class 상위클래스명 { // 필드와 메서드}class 하위클래스명 extends 상위클래스명 { ..