본문 바로가기

항해 99/Java

(52)
Java - Object java.lang 패키지자바의 기존 제공 라이브러리(클래스 모음) 중 가장 기본이 되는 패키지(lang : Language의 줄임말) java.lang 패키지의 대표 클래스Object : 모든 자바 객체의 부모 클래스String : 문자열Integer, Long, Double : 래퍼 타입, 기본형 데이터 타입을 객체로 만든 것Class : 클래스 메타 정보System : 시스템과 관련된 기본 기능들을 제공import  생략 가능java.lang 패키지는 모든 자바 애플리케이션에 자동으로 임포트되므로 임포트 구문 사용을 하지 않아도 됨 Object 클래스자바의 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스임 클래스에 상속 받을 부모 클래스가 없을 시 묵시적으로 Object 클래스를 상속받고..
정렬 알고리즘 정렬 알고리즘(Sort Algorithm)원소들을 일정한 순서대로 열거하는 알고리즘정렬 알고리즘을 사용할 때, 상황에 맞게 다음의 기준들로 사용할 알고리즘을 선정한다.시간 복잡도 (소요되는 시간)공간 복잡도 (메모리 사용량)시간, 공간 복잡도는 Big-O 표기법으로 나타낼 수 있다. 정렬되는 항목 외에 충분히 무시할 만한 저장공간만을 더 사용하는 정렬 알고리즘들을 제자리 정렬이라고 한다. 정렬 알고리즘의 특징특징설명시간 복잡도일부 알고리즘은 작은 데이터 집합에 대해 빠르지만, 큰 데이터 집합에 대해 느릴 수 있다.알고리즘의 시간 복잡도를 고려하여 적절한 정렬 알고리즘을 선택해야 한다.안정성안정적인 정렬 알고리즘은 동일한 값의 순서가 바뀌지 않는 특징을 가지고 있다.이는 동일한 값을 가진 요소들의 순서가 ..
Array & LinkedList 자료 구조데이터를 효율적으로 저장, 관리, 처리하기 위해 컴퓨터에 데이터를 조직화하고 관리하는 방법으로 다양한 종류의 자료 구조가 있으며, 각각은 특정 종류의 문제를 해결하기 위해 설계되었다. 기본적인 자료 구조에는 배열, 연결 리스트, 스택, 큐, 트리, 해시 테이블 등이 있다. 배열(Array)배열은 입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조이다.메모리 상에서 연속적으로 저장되어 있는 특징을 갖기 때문에 index를 통한 접근이 용이하다.고정된 크기를 가지며, 크기 변경이 어렵다, 미리 할당된 메모리 크기를 초과하면 새로운 메모리 공간을 할당하고 데이터를 복사해야 한다.메모리 사용이 효율적으로 추가적인 메모리를 사용하지 않는다.시간 복잡도탐색 : O(1). 단, 접근하려는 인..
Java - Garbage Collector, Java Map Garbage Collector 가비지 컬렉터와 가비지 컬렉션의 차이 가비지 컬렉터 : 메모리 관리를 담당하는 시스템 또는 프로그램의 구성 요소이며, 메모리에서 더 이상 사용되지 않는 객체를 찾아 제거하여 메모리를 회수하는 역할을 수행 가비지 컬렉션 : 메모리 관리 기술 중 하나로, 가비지 컬렉터에 의해 수행되는 프로세스를 의미 가비지 컬렉션은 프로세스 자체이고 컬렉터는 실제 역할을 수행하는 주체이다. Garbage Collection(GC)? 자바의 메모리 관리 방법 중 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스 장점 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 하고, 개발자 입장에서 메..
Java - 컴파일, JVM 스택 / 힙 메모리, 클래스 / 인스턴스 Java 컴파일 과정 자바 컴파일 과정 개발자가 자바 소스코드(.java)를 작성합니다. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다, 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다. 컴파일된 바이트 코드를 JVM의 클래스로더(Class Loader)에게 전달합니다. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올립니다. 클래스 로더 세부 동작 로드 : 클래스 파일을 가져와서 ..
Java - SOLID 객체 지향의 SOLID 원칙 SOLID는 SRP, OCP, LSP, ISP, DIP의 앞 글자들을 딴 용어 SRP (Single Responsibility Principle) - 단일 책임 원칙 OCP (Open-Closed Principle) - 개방 폐쇄 원칙 LSP (Liscov Substitution Principle) - 리스코프 치환 원칙 ISP (Interface Segregation Principle) - 인터페이스 분리 원칙 DIP (Dependency Inversion Principle) - 의존 관계 역전 원칙 객체 지향 설계를 잘해서 프로그래밍할 때의 장점 유지보수가 쉬워짐 확장성이 좋아짐 재사용성이 상승 자연적인 모델링이 가능 클래스 단위로 모듈화해서 대형 프로젝트 개발이 용이해짐..
WIL-4 Fact : 이번주 있었던 일, 내가 한 일 월 : Spring 입문 과정 테스트, 1레벨 과제 페어 리뷰, 2레벨 과제 페어 프로그래밍 시작 화 : 도서관 서버 유저 등록 및 조회 관련 API 개발 수 : 개발 API 테스트 및 프로젝트 Branch 통합 및 2레벨 프로젝트 마무리 목 : 2레벨 과제 페어 리뷰, 3레벨 과제 UseCaseDiagram 작성, API 명세서 작성 금 : 3레벨 프로젝트 생성, 관리자 등록 및 권한 인증/인가 API 구현(테스트 진행) 토 : Spring Security 적용 및 테스트 진행, 프로젝트 Branch 통합 및 프로젝트 마무리 Feeling : 나의 감정적인 반응, 느낌 프로젝트 마다 다른 페어와 진행하다 보니 약간 어색한 느낌이 들었음 API 구현 시 예기치..
객체지향 생활체조 9가지 원칙 객체지향 생활 체조 원칙 소트웍스 앤솔러지(ThoughWorks Anthology) 책에서 나오는 원칙으로 9가지 원칙을 준수하면서 객체지향을 추구할 수 있다고 한다. 1. 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다. 2. else 예약어를 쓰지 않는다. 3. 모든 원시 값과 문자열을 포장한다. 4. 한 줄에 점을 하나만 찍는다 5. 줄여 쓰지 않는다(축약 금지). 6. 모든 엔티티(Entity)를 작게 유지한다. 7. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 8. 일급 컬렉션을 쓴다. 9. Getter / Setter / 프로퍼티를 쓰지 않는다. 1. 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다. 코드에 너무 많은 들여쓰기가 있다면, 가독성과 유지 관리 측..