일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- SSAFY웰컴킷
- 누적합
- rank
- linkedlist
- 순위함수
- 내부반복
- Java
- Stream
- prefix sum
- 덱
- SSAFY
- 논리 연산자
- 서로소집합
- 비트 연산자
- 비교 연산자
- 연산자 우선순위
- SWEA
- 삼성청년SW아카데미
- 연결리스트
- unionfind
- Union
- 자료구조
- 알고리즘
- 산술 연산자
- SSAFY입학
- 자바 연산자
- deque
- 삼항 연산자
- 코딩교육
- 프로그래머스
- Today
- Total
목록CS/JAVA (12)
개발하는 몽당연필
컴포지션은 기존 클래스가 새로운 클래스의 구성요소가 되는 것으로, 상속(Inheritance)의 단점을 커버할 수 있습니다. 상속 하위 클래스가 상위 클래스의 특성을 재정의한 것 → IS-A 관계 컴포지션 기존 클래스가 새로운 클래스의 구성요소가 되는 것 → HAS-A 관계 그럼 컴포지션에 대해 더 알아봅시다. 📌 상속 (Inheritance) 컴포지션에 대해 알아보기전에 상속을 먼저 간단하게 알아봅시다. 먼저 상속이란 하위 클래스가 상위 클래스의 특성을 재정의한 것을 말합니다. 부모 클래스의 메서드를 오버라이딩하여 자식에 맞게 재사용하는 등, 상당히 많이 쓰이는 개념이면서 활용도도 높습니다. 하지만 이렇게 장점만 존재하는 것은 아닙니다. 상속을 제대로 사용하지 않으면 유연성을 해칠 수 있습니다. 🔍 구..
오늘은 Record에 대해서 알아보겠습니다. Record는 Java 14에서 프리뷰로 도입되고 16부터 정식 스펙에 포함된 클래스 타입으로, 순수히 데이터를 보유하기 위한 클래스입니다. 객체를 생성할 때 보통은 아래와 같이 개발자가 만들어야합니다. 📎 불변 데이터 객체 예시 public class Person { private final String name; private final int age; @Override public int hashCode() { return Objects.hash(name, address); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } else if (!(obj insta..

📌 프로그래밍의 오류 종류 프로그램에서 오류가 발생하면 시스템 레벨에서 프로그램에 문제를 야기하여 원치않는 버그를 일으키거나, 심각하면 실행 중인 프로그램을 강제로 종료시키기도 합니다. 프로그램 오류의 원인으로는 정말 다양한 상황이 있는데, 내부적인 요인으로는 프로그램 설계 로직에 구멍이 있어서 그럴수도 있고, 외부적인 요인으로는 프로그램 자체 문제가 아닌 하드웨어에서 문제가 생겨 프로그램에 오류가 발생할 수 도 있습니다. 프로그래밍에서 이러한 오류를 발생 시점에 따라 크게 3가지로 나눕니다. 컴파일 에러 (compile-time error) : 컴파일시에 발생하는 에러 런타임 에러 (runtime error) : 실행시에 발생하는 에러 논리적 에러 (logical error) : 실행은 되지만 의도와 ..

📌 변수의 기본형 & 참조형 타입 변수 (variable) : 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간 자바에서 말하는 데이터 타입(자료형) : 변수에 적재할 데이터가 메모리에 어떻게 저장되고 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 키워드 데이터 타입(자료형)은 크게 2가지로 구분됩니다. 기본형 (primitive type) : 계산을 위해 실제 값을 저장한다. 참조형 (reference type) : 객체의 주소를 저장한다. null 또는 객체의 주소 (4byte, 0x0 ~ 0xffffffff) 📌 기본형 타입 (Primitive Type) 기본형 타입에는 크게 논리형 (boolean), 문자형 (char), 정수형 (byte, short, int, lo..

📌 들어가기전 ... C / C++ 프로그래밍을 할 때 메모리 누구를 막기 위해 객체를 생성한 후 사용하지 않는 객체의 메모리를 프로그래머가 직접 해제 해주어야 했습니다. 하지만, Java에서는 JVM이 구성된 JRE가 제공되며, 그 구성 요소 중 하나인 GC이 자동으로 사용하지 않는 객체를 파괴합니다. GC에 대해 알아보기 전에 'stop-the-world'라는 용어를 알아야합니다. 'stop-the-world'란 GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것 입니다. 어떤 알고리즘을 사용하더라도 'stop-the-world'는 발생하게 되는데, 대개의 경우 GC 튜닝은 이 'stop-the-world' 시간을 줄이는 것이라고 합니다. GC를 해도 더 이상 사용 가능한 메모리 영역이 없는..
📌 Intrinsic Lock 자바의 모든 객체는 lock을 가지고 있다. 모든 객체가 가지고 있기 때문에 고유 락 (Intricsic Lock)이라고 하고, 모니터처럼 동작한다고 하여 monitor lock 혹은 monitor라고 한다. public class Counter { private int count; public int increase() { return ++count;// Thread-safe 하지 않은 연산 } } Q. 위의 코드에서 ++count 문이 atomic 연산인가? A. read (count 값 읽기) modify (count 값 수정) write (count 값 저장) 과정에서 여러 Thread가 공유 자원(count)으로 접근할 수 있으므로 동시성 문제가 발생한다. 📢 동시..

📌 직렬화란? 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 스트림(stream of bytes) 형태로 연속적인 데이터로 변환하는 기술 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference Type의 데이터들은 인스턴스를 전달할 수 없다. 따라서, 이런 문제를 해결하기 위해선 주소값이 아닌 Byte 형태로 직렬화된 객체 데이터를 전달해야 한다. 직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서, 전송 및 저장이 가능한 데이터로 만들어주는 것이 바로 직렬화라고 말할 수 있다. 이를 시스템적으로 살펴보면, JVM의 ..
call by value / call by reference는 간단하면서도 중요한 주제이다. 헷갈리기 쉬운 개념이기도 하다. 결론부터 말하자면 자바는 call by value 방식을 사용한다❕ 💡 Call by value (값에 의한 호출) 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성된다. (종료 시 해당 공간이 사라짐) call by value 호출 방식은 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달한다. 이 때 복사된 인자는 함수 안에서 지역적으로 사용되기 때문에 local value 속성을 가진다. 따라서, 함수 안에서 인자 값이 변경되더라도, 외부 변수 값은 변경되지 않는다. void main(String[] args) { int val = 25;/..
📎 캐스팅 (Casting) 📌 캐스팅이란 ? 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 말합니다. 캐스팅은 타입 변환 혹은 형변환 이라고 합니다. 📌 자바의 데이터형 먼저 자바의 데이터형에 대해 알아봅시다. 자바의 데이터형은 크게 두가지로 나뉩니다. 기본형 (Primitive Type) Boolean Type (boolean), Numeric Type (short, int, long, float, double, char) 참조형 (Reference Type) Class Type, Interface Type, Array Type, Enum Type, etc... 📌 캐스팅이 필요한 이유? 1. 다형성 : 오버라이딩된 함수를 분리해서 활용할 수 있다. 2. 상속 : 캐스팅을 통해 범용적인 프로그래밍이..

🎯 자바 가상 머신 JVM 이란? 자바 가상 머신 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어입니다. 자바 코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행됩니다. JVM은 자바 실행 환경 JRE(Java Runtime Environment)에 포함되어 있습니다. JVM은 다른 프로그램을 실행시키는 것이 목적으로, 갖춘 기능으로는 크게 2가지로 말할 수 있습니다. 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 하는 것 프로그램 메모리를 관리하고 최적화하는 것 즉, JVM을 사용함으로써 얻는 가장 큰 이점은 JVM을 사용하면 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작하도록 할 수 ..