Programming Language(10)
-
객체 지향 설계 5원칙 - SOLID
높은 응집도와 낮은 결합도, 관심사의 분리를 위해 1. SRP(Single Responsibility Principle) : 단일 책임 원칙 어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이다. 2. OCP (Open Closed Principle) : 개방 폐쇄 원칙 소프트웨어 엔티티는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다. 3. LSP (Liskov Substitution Principle) : 리스코프 치환 원칙 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다. 4. ISP (Interface Segregation Principle) : 인터페이스 분리 원칙 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다. 인터페이스는 그 역..
2021.10.18 -
JVM의 Garbage Collection 과정
원래는 이 주제를 음주 글쓰기로 쓰고 있었는데, 다음날 제정신 차리고 보니까 도저히 아니다 싶어서 싹 갈아 엎고 다시 씀. Stop - The - World GC가 가비지 컬렉션을 수행할 시, 가비지 컬렉션을 실행하는 쓰레드를 제외하고 나머지 모든 쓰레드는 잠깐 멈춘다. 이 멈춰진 쓰레드들은 가비지 컬렉션이 실행되고 난 이후에 다시 실행되는데, 이렇게 가비지 컬렉션을 수행하기 위해 JVM 이 애플리케이션을 잠깐 멈추는 것을 "stop-the-world"라고 한다. 당연히 stop-the-world 시간이 길어지면 그만큼 쓰레드들이 멈춰 대기해야하므로 프로그램을 사용하는 입장에선 큰 성능 저하이다. GC에 있어 stop-the-world 현상은 피할 수 없어서, 성능 튜닝을 위해선 가능한 stop-the-..
2021.08.20 -
[String] equals 메서드와 == 연산의 차이
== 연산은 두 String 객체의 주소값이 같은지만 확인을 하는데 반해, equal 메서드는 스트링 객체의 값이 같은지 확인한다. 해시 코드 값이 다르더라도, 값이 같다면 true를 리턴한다. 들어가며 자바의 모든 객체는 object 클래스를 상속 받으며, object 클래스 내에선 equals 메서드가 있어 두 객체가 같은지 확인할 수 있다. 이 equals 메서드 내에선 기본적으로 hashCode() 메서드로 두 객체의 해쉬코드 값이 같은지를 확인한다. 한편 String 클래스에서는 이 equals 메서드를 오버라이딩하는데, 이 오버라이딩 된 String 클래스의 equals 메서드는 내부적으로 hashCode() 메서드로 해쉬 코드를 비교하는 작업을 하는지 궁금해졌다. 객체 사이의 == 연산 기본..
2021.08.19 -
자바의 스택 / 프레임 구조
자바가 실행되고 JVM 스레드 생성 시, 하나의 스레드 당 하나의 스택이 생성된다. 이 스택은 0개 이상의 프레임을 담는데, 프레임은 함수 실행 시 생성되는 변수, 연산 스택, 상수 풀 참조들을 담는다. 1. JVM 스택 공식 문서에 JVM 스택에 대해 깔끔히 정의되어 있다. 스레드가 하나 생성될 시, 그 스레드의 스택 또한 하나 생성된다. 이 스택은 프레임이란 친구를 저장하며, 자바 외 다른 일반적인 언어들의 스택과 유사한 기능을 수행한다. 그렇다면 이 프레임이란 친구는 무엇일까? 2. frames 프레임은 함수 실행 시 생성되며 데이터나 부분적인 결과값들을 저장한다. 타 언어들과 마찬가지로 함수가 실행될 때 scope가 생기는데, 프레임에선 이 scope 내의 값들을 저장한다고 보면 된다. 프레임은 ..
2021.08.13 -
객체지향의 특성
1. 추상화 2. 캡슐화 3. 상속 4. 다형성 1. 추상화 관심 대상들로부터 공통적인 기능, 특성들을 추출해 한 곳에 모은 것. 프로그래밍에서는 객체들로부터 공통의 메소드/특성을 뽑아 인터페이스/추상클래스 등으로 정의하는 것을 의미한다. 자바의 경우를 예로 들면, 인터페이스와 추상 클래스가 해당이 된다. 대표적인 인터페이스인 Collection은 (https://docs.oracle.com/javase/7/docs/api/), set, list, queue 등 여러 개의 객체를 하나의 객체에 담아 처리하는 클래스들의 공통 메서드들을 선언하였고, 해당 클래스들은 Collection의 메서드들을 구현함으로써 그에 해당하는 기능을 수행할 수 있다. 2. 캡슐화 함수 혹은 특성들을 하나의 단위로 묶어 처리하는..
2021.08.13 -
자바의 접근 제어자
자바의 접근 제어자는 총 4개. 그림 한장으로 정리 ssap가능.
2021.08.11 -
자바의 참조 변수(Reference Type)
생성된 인스턴스의 참조를 담는 변수 요약 자바는 기본적으로 byte, short, int, long, float, double, char, boolean의 8가지 원시 자료형(Primitive Type) 을 가지고 있다. 참조 자료형(참조 변수)는 이 8가지 자료형 말고 전부 다라고 생각하면 된다. 쉽게 말해, new로 객체를 생성하여 할당하는 모든 변수이다. 더 쉽게 말해, C/C++ 의 포인터 변수 역할이라고 생각하면 된다.(값의 직접적인 변경 불가) 원리 기본적으로 원시 자료형의 경우 호출한 함수 내의 scope를 전제하여 stack에 값이 담기게 된다. 예를 들어, public class PrimitiveValue { public static void main(String args[]) { int..
2021.08.10 -
배열
1. 개요 및 네이밍 2. 선언 및 초기화 3. 다차원 배열 4. API 참고 1. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html 2. https://wikidocs.net/206 3.http://tcpschool.com/java/java_array_oneDimensional 1. 개요 및 네이밍 배열 : 고정된 갯수의, 한가지 타입의 값들을 묶는 컨테이너 객체. (오라클 자바 튜토리얼 정의 : An array is a container object that holds a fixed number of values of a single type.) 배열 내의 각각 요소들을 인덱스로 접근할 수 있음. 네이밍은 ~s 로 주로 표현...
2021.08.08