3. Java 10

[Java] 원자성, 바인딩, 모듈, perthis, 자바 에이전트

안녕하세요?오늘은 원자성, 바인딩, 모듈, perthis 모델, 자바에이전트에 대해서 공부해볼게요.시작합니다! 1. 원자성(Atomicity) Java에서 원자성(Atomicity)은 멀티스레딩 환경에서 여러 스레드가 동시에 공유 자원에 접근할 때 데이터 일관성을 보장하는 중요한 개념입니다. 원자성 있는 연산은 분할될 수 없는 작업으로, 다른 스레드가 그 연산이 완료되기 전까지 중간 상태를 볼 수 없도록 보장합니다. 1. 1) Atomic 클래스 Java에서는 java.util.concurrent.atomic 패키지에서 원자성 있는 연산을 지원하는 다양한 클래스를 제공합니다. 이 클래스들은 내부적으로 CAS(Compare-And-Swap) 같은 저수준 동기화 기법을 사용하여, 안전한 멀티스레딩을 지원합니..

3. Java 2024.09.17

[Java] 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 특징

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 설계와 개발의 패러다임으로, 프로그램을 객체(object)라는 단위로 구성하는 것을 중심으로 합니다. OOP의 주요 특징은 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism), 추상화(abstraction)입니다. 이 네 가지 원칙은 객체지향 프로그래밍의 근간을 이루며, 소프트웨어의 구조와 동작을 정의하는 데 중요한 역할을 합니다. 1. 캡슐화 (Encapsulation)캡슐화는 객체의 상태(데이터)를 보호하고, 객체 내부의 구현 내용을 숨기며, 객체 외부에서는 이를 알지 못하도록 하는 것입니다. 이를 통해 데이터의 무결성을 유지하고, 객체 간의 상호 작용을 명확하게..

3. Java 2024.09.02

[Java] 배열(Array)과 리스트(List)

배열과 리스트는 데이터를 저장하고 관리하는 기본적인 자료 구조입니다. 두 자료 구조는 각각의 특성과 장단점이 있으며,  용도에 따라 적합한 선택이 필요합니다.    1. 배열 (Array)1) 특징고정 크기: 배열은 생성 시 크기가 정해지며, 이후에는 크기를 변경할 수 없습니다.인덱스 접근: 배열의 요소는 인덱스를 통해 O(1) 시간 복잡도로 접근할 수 있습니다.동일한 데이터 타입: 배열의 모든 요소는 동일한 데이터 타입을 가져야 합니다. 2) 장점빠른 접근 속도: 인덱스를 통해 요소에 바로 접근할 수 있어 매우 빠릅니다.메모리 효율성: 요소들이 연속된 메모리 공간에 저장되어 있어 메모리 접근이 효율적입니다.간단한 구조: 구조가 단순하여 오버헤드가 적습니다.3) 단점고정 크기: 배열의 크기를 동적으로 변..

3. Java 2024.08.23

[JAVA] Concurrency 1 (High Level Programming Language/Essential Java Classes)

안녕하십니까! 며칠만에 돌아온 Dorothy 입니다.요즘 너무 덥네요..(헥헥) 더위에 취약하고삼재도 아닌데(?) 여기저기 다쳐서 병원투어(?) 중이라 며칠간 포스팅을 하지못했습니다 ㅠ암튼 그것은 그것이고, 할 공부는 다시 해야겠죠? 시작합니다! 오늘은 JAVA 고급프로그래밍과 관련된 개념 중 동시성(Concurrnecy)에 관해 배워보도록 하겠습니다.동시성은 내용이 방대하여 총 3편으로 나누어 포스팅 하려합니다!비록 이 내용이 길다고 해도 꼭 숙지해야 하는 개념이기에 집중 부탁드립니다.   자바 공식 Concurrency 튜토리얼 1. Threads스레드는 경량 프로세스라고도 합니다. 프로세스와 스레드 모두 실행 환경을 제공하지만 새 스레드를 생성하는 데 필요한 리소스는 새 프로세스를 생성하는 것보다 ..

3. Java 2024.07.30

[JAVA] Semantics (High Level Programming Language)

안녕하세요? Dorothy입니다! 어우, 이제 제가 사는 이곳은 대프리카가 시작될 것만 같아요.이제 선글라스와 양산은 필수인 계절이 온 것입니다.. (시력보호와 피부/두피 를 위해ㅋ)각설하고, 아무리 더워도 할 공부는 해야겠죠? (흑흑)자, 시작해보겠습니다. 오늘은 고급 프로그래밍 언어의 공부 과정에서 중요한 개념인 시맨틱(Semantics)에 관해서 배워보도록 하겠습니다. 프로그래밍 언어에서 시맨틱(semantics)은 코드의 의미를 의미합니다. 즉, 코드가 작성된 의도와 실제로 어떻게 실행되는지를 나타냅니다.구문(syntax)이 코드의 문법적 구조를 다룬다면,시맨틱은 코드가 실제로 어떤 동작을 하는지,어떤 값을 생성하는지에 대한 규칙을 정의합니다.  쉽게 말해, 시맨틱은 코드를 읽고 이해하는 것과 같..

3. Java 2024.07.24

[JAVA] 클래스(Class)의 개념

안녕하세요? 다시 돌아온 돌아버릴거같은 Dorothy입니다! (이유를 적으려다가  tmi 같아서 이하 생략..)   오늘은 1) 클래스(Class)와 객체(인스턴스)의 개념과 관계, 그리고 2) 객체지향프로그래밍(OOP)의 개념에 대해서 공부 해보겠습니다.   1] 클래스와 객체(인스턴스): 객체 지향 프로그래밍(OOP) 핵심 개념 1. 클래스 (Class)클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 클래스는 객체가 가질 속성(데이터)과 행동(메서드)을 정의합니다. 클래스 자체는 구체적인 값을 가지지 않으며, 단지 객체를 만들기 위한 틀을 제공합니다.속성 (Attributes): 클래스가 가지는 데이터. 필드(field)라고도 합니다.메서드 (Methods): 클래스가 할 수 있는 동작. 함수라..

3. Java 2024.07.22

[JAVA] JVM 메모리 구조란? (자바 가상 머신에 대해서 AraBoJa)

안녕하세요? 오늘도 돌아온 Dorothy입니다.  오늘은 JVM 메모리 구조에 대해서 알아보도록하겠습니다.Java Virtual Machine, 줄여서 JVM 구조라고 하는데요, JVM은 JAVA structure에서 중요한 내용이므로 반드시 정확하게 그 개념과 구조에 대해서 숙지해야 하겠습니다.  자바 가상 머신(JVM)의 메모리 구조는 크게 다음과 같은 영역으로 나뉩니다: 메서드 영역 (Method Area)힙 영역 (Heap)자바 스택 (Java Stacks)PC 레지스터 (PC Registers)네이티브 메서드 스택 (Native Method Stacks)이와 같이 5개의 영역으로 이루어져 있는데요, 이를 알아보기 쉽게 도식화하면 다음과 같습니다.  1. 메소드 영역메소드 영역은 JVM의 메모리 ..

3. Java 2024.07.21

[JAVA] 고급 프로그래밍 언어(High Level Programming Language)

안녕하세요? Dorothy 입니다.오늘은 고급 프로그래밍 언어(High Level Programming Language)에 대해서 알아보겠습니다. 컴퓨터 과학에서 high-level programming language는 컴퓨터의 세부 사항으로부터 강한 추상화를 가진 프로그래밍 언어입니다.   이것을 이용하게 되면 low-level programming language와 대조적으로, 이는 자연 언어 요소를 사용할 수 있고, 사용하기 더 쉬울 수 있으며, 메모리 관리와 같은 컴퓨팅 시스템의 중요한 영역을 자동화하거나 (심지어 완전히 숨기기도 하여) 프로그램 개발 과정을 더 단순하고 이해하기 쉽게 만듭니다. 제공되는 추상화의 양이 프로그래밍 언어의 "high-level" 정도를 정의합니다.1960년대에는, ..

3. Java 2024.07.20

[JAVA] 자바 클래스 파일(feat. compiler)

안녕하세요? 자바를 유랑하는 유랑자이자 안내자가 되고 싶은 Dorothy 입니다!오늘은 자바 클래스 파일에 대해서 알아보겠습니다. (두둥!!!) 컴파일러는 소스 코드를 CPU의 기계어로 변환해주는 프로그램입니다. 일반적으로 하이 레벨 프로그래밍 언어의 소스 코드는 인간이 이해하기 쉽도록 작성되어 있고, 기계어는 컴퓨터가 이해하기 쉬운 형태입니다. 컴파일러는 이 두 가지 형태의 코드를 변환하여 소스 코드를 실행 가능한 형태로 만들어줍니다. 컴파일러는 일반적으로 소스 코드를 읽어들여서 문법에 맞는지 검사하고, 코드를 분석하고, 중간 코드를 생성하고, 최종적으로 기계어 코드를 생성합니다. 이 과정을 컴파일링이라고 합니다. 컴파일러는 소스 코드를 기계어로 변환하는 과정에서 성능 최적화나 보안 검사 등의 기능을 ..

3. Java 2024.07.19

[JAVA] All about JAVA [ JAVA란 무엇이냐? ]

안녕하세요? 오늘은 자바 프로그램과 그 배경이 되는 세계관 설명을 드리겠습니다.  일단, 자바 프로그래밍, 자바 웹 프로그래밍 그리고 스프링 부트 프로그래밍을 하기 위해서는 개발 환경이 필요합니다. 이것을 JDK(Java Development Kit)라고 하는데요, JDK는 최신 버전 뿐만 아니라, 이전 버전들을 선택할 수 있습니다. 1. Java(자바) 시작 이전의 역사Java는 현재 웹 어플리케이션 개발 언어이지만 처음부터 웹 서비스를 위해 만든 언어는 아닙니다.  임베디드 가전[디바이스] 시장의 성장을 예상한 그린(Green)팀이 임베디드 가전제품에 들어갈 다양한 OS와 CPU 에서 동작하는 독립적인 언어를 만드는 과정에서 Java는 태어났습니다. 1) 1990년_ 12월 전문가를 모으다워크스테이션..

3. Java 2024.07.18