오늘 진행한 학습 요약
1. Java 기본 개념 총정리
- Java랑 JavaScript
- Java 주요 개념
- JVM, JRE, JDK란?
- Stack과 Heap
얄팍한 코딩사전 - 자바를 알아보자 링크 : https://youtu.be/OxvtGYvVkRU?si=2-mO4UE45UHBSYEK
강성지(찌야) - Java 알려주는 은행원 - Stack & Heap 이해하기
링크 : https://youtu.be/W2q7W4_3gpY?si=sPhITxvsZ9xklOq_
2. StringBuilder, String 클래스 개념 정리
- StringBuilder 클래스
- String 클래스
3. 알고리즘 코드카다 Day11~13 (작성 생략)
CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest
학습 정리
1. Java 기본 개념 총정리
- Java랑 JavaScript,,,
- Java의 주요 개념
개념 | 설명 |
객체 지향 프로그래밍 (OOP) |
Java는 객체 지향 언어로, 객체와 클래스를 기반으로 코드 구조를 설계합니다. 주요 개념은 캡슐화, 상속, 다형성, 추상화입니다. |
클래스 (Class) |
객체를 생성하기 위한 청사진으로, 속성(필드)과 메서드(기능)로 구성됩니다. |
객체 (Object) |
클래스를 통해 생성된 인스턴스로, 실질적인 데이터를 포함하고 있습니다. |
상속 (Inheritance) |
기존 클래스를 확장하여 새로운 클래스를 생성하는 기능으로, 코드 재사용성을 높여줍니다. |
캡슐화 (Encapsulation) |
데이터와 메서드를 하나의 단위로 묶고, 외부에서 접근을 제한하는 개념입니다. 주로 private 접근 제한자를 사용합니다. |
다형성 (Polymorphism) |
하나의 객체가 여러 가지 형태를 가질 수 있는 능력으로, 오버로딩과 오버라이딩을 통해 구현됩니다. |
추상화 (Abstraction) |
필요하지 않은 세부사항을 숨기고 중요한 부분만을 노출하는 개념으로, abstract 클래스와 인터페이스로 구현됩니다. |
인터페이스 (Interface) |
클래스가 구현해야 하는 메서드 목록만을 정의하는 타입으로, 다중 상속을 가능하게 합니다. |
패키지 (Package) |
유사한 클래스들을 그룹으로 묶어 관리하기 위한 디렉토리 구조입니다. |
JVM (Java Virtual Machine) |
Java 프로그램이 실행되는 가상 머신으로, 운영체제 독립성을 제공합니다. |
JRE (Java Runtime Environment) |
Java 프로그램 실행 환경으로, JVM과 라이브러리를 포함하고 있습니다. |
JDK (Java Development Kit) |
Java 개발 도구 모음으로, 컴파일러와 JRE가 포함되어 있습니다. |
가비지 컬렉션 (Garbage Collection) |
사용되지 않는 객체를 자동으로 메모리에서 제거하여 메모리 누수를 방지합니다. |
예외 처리 (Exception Handling) |
코드 실행 중 발생할 수 있는 오류를 처리하는 메커니즘으로, try, catch, finally 블록을 사용합니다. |
멀티스레드 (Multithreading) |
여러 스레드를 사용해 동시에 여러 작업을 수행할 수 있게 하여 프로그램 효율을 높입니다. |
컬렉션 프레임워크 (Collection Framework) |
데이터 구조를 편리하게 다루기 위한 인터페이스와 클래스 모음으로, List, Set, Map 등이 포함됩니다. |
스트림 (Stream) |
컬렉션에 대한 반복 작업을 함수형 스타일로 처리할 수 있도록 하는 기능입니다. |
람다 표현식 (Lambda Expressions) |
함수를 간결하게 표현할 수 있도록 도와주는 기능으로, Java 8부터 도입되었습니다. |
제네릭 (Generics) |
클래스와 메서드에서 사용할 데이터 타입을 미리 지정하지 않고 유연하게 설정할 수 있도록 하는 기능입니다. |
어노테이션 (Annotations) |
메타데이터로, 코드에 대한 추가 정보를 제공하며 컴파일러에 의해 해석됩니다. @Override, @Deprecated 등이 있습니다. |
- JVM
- 자바 프로그램을 실행하는 가상 머신
- 바로 작성된 코드가 운영체제에 관계없이 어디서든 실행될 수 있도록 함
- 자바 코드를 기계어로 변환해주는 역할
- JRE
- JRE는 자바 애플리케이션을 실행하기 위해 필요한 모든 구성 요소들을 포함하는 환경
- 자바 애플리케이션을 실행할 때 필요한 환경을 제공하지만, 개발에 필요한 도구는 포함되어 있지 않는 한계점
- 컴파일러(javac)와 디버거 같은 개발 도구들이 포함
- JDK
- JDK는 자바 애플리케이션을 개발하기 위한 도구 모음
- JRE도 포함되어 있어 개발자들이 작성한 코드를 실행하고 테스트할 수 있음
- Stack
- 메모리에서 일시적인 데이터를 저장
- 지역 변수, 매개 변수, 리턴 주소 등을 저장
- 메모리를 빠르게 할당하고 해제할 수 있어 속도가 빠름
- 메모리 관리가 자동으로 이루어짐
- LIFO (Last In, First Out) 방식으로 데이터가 쌓이고 제거
- Stack은 크기가 제한되어 있어 너무 많은 데이터를 할당할 경우 Stack Overflow가 발생
- Heap
- 동적으로 할당되는 메모리 영역
- 객체와 같은 큰 데이터, 런타임에 생성되는 변수들을 저장 (new로 생성되는거!)
- Stack에 비해 메모리 할당과 해제 속도가 느리지만, 유연하게 메모리를 사용
- 프로그래머가 직접 메모리를 할당하고 해제해야 하며 자바에서는 가비지 컬렉터가 자동으로 메모리를 관리
- 메모리 관리를 잘못하면 메모리 누수가 발생
항목 | Stack | Heap |
용도 | 함수 호출 시 생성되는 지역 변수, 매개 변수, 리턴 주소 저장 | 동적으로 생성되는 객체와 큰 데이터 저장 |
속도 | 빠름 | 상대적으로 느림 |
메모리 관리 | 자동으로 관리(LIFO 방식) | 프로그래머가 직접 관리(가비지 컬렉션 등 사용 가능) |
메모리 할당 | 고정 크기, 정적 할당 | 동적 할당, 필요에 따라 메모리 크기 조정 가능 |
제한 | 제한된 메모리 크기(Stack Overflow 위험) | 상대적으로 크기가 크지만, 메모리 누수 위험 있음 |
수명 | 함수 종료 시 자동 해제 | 프로그램이 종료되거나 명시적으로 해제될 때까지 유지 |
주 사용 데이터 유형 | 지역 변수, 함수 호출 시 사용 | 객체, 동적으로 할당된 데이터 (new 키워드로 생성된 객체 등) |
2. StringBuilder, String 클래스 개념 정리
- StringBuilder 클래스
- StringBuilder는 자바에서 문자열을 효율적으로 처리하기 위해 제공되는 클래스
- 일반적인 String 클래스와 달리, StringBuilder는 mutable(변경 가능)한 객체로, 문자열을 수정하거나 추가할 때 새로운 객체를 생성하지 않고, 기존 객체를 변경하여 성능을 향상
StringBuilder | Notion
StringBuilder는 자바에서 문자열을 효율적으로 처리하기 위해 제공되는 클래스입니다. 일반적인 String 클래스와 달리, StringBuilder는 **mutable(변경 가능)**한 객체로, 문자열을 수정하거나 추가할 때
shinelee26.notion.site
- String 클래스
- String 클래스는 자바에서 문자열을 다루는 대표적인 클래스
- 다양한 메서드를 통해 문자열을 처리하거나 변환
String 클래스 | Notion
String 클래스는 자바에서 문자열을 다루는 대표적인 클래스입니다. String은 불변 객체(immutable)로, 한 번 생성된 문자열은 변경할 수 없습니다. 하지만 다양한 메서드를 통해 문자열을 처리하거나
shinelee26.notion.site