본문 바로가기

Language13

객체지향(OOP)의 특징 OOP란? OOP (Object-Oriented Programming)이란 객체 지향적인 프로그래밍. 즉, C언어 같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것이다. OOP는 객체를 기준으로 코드를 나누어 구현한다. 자바의 경우 그 구성 부분 단위가 클래스이다. 자세히 말하자면 클래스는 설계도고 직접 일을 하는 구현체는 인스턴스다. (객체와 인스턴스는 또 자세히 말하면 다른 의미로 사용되기도 하기 때문에 여기서는 이렇게 말하겠다.) 요약하자면 OOP는 객체의 관점에서 프로그래밍 하는 것을 의미한다. C언어는 절차 지향 프로그래밍인데, 절차 지향 프로그래밍은 프로세스가 함수 단위로 순서대로 진행되는 것을 말한다. OOP는 절차지향에 비해서 사람의 사고방식과 더 가깝다. OOP.. 2022. 4. 17.
Java 프로그램 실행 과정 (JVM 동작 원리) JVM의 역할 Application ClassLoader를 통해 읽어 들여 Java API와 함께 실행. Java와 OS 사이에서 중개자 역할을 수행한다. Java Byte Code (.class file)를 OS에 맞게 해석하여 JVM 위에서 OS와 상관없이 실행된다. JVM은 스택기반의 가상 머신이며, 메모리 관리와 Garbage Collection을 수행한다. Java 프로그램 실행과정 프로그램이 실행되면 OS가 JVM에게 필요한 메모리를 할당한다. Java 컴파일러(javac)가 자바 소스 코드(. java)를 읽어 자바 바이트코드(.class)로 변환한다. Class Loader를 통해 class 파일들을 JVM으로 로딩한다. 로딩된 class파일들은 Execution Engine을 통해 해석된.. 2022. 4. 17.
GC 동작 원리 GC (Garbage Collector)란 C/C++ 언어와 달리 자바는 개발자가 명시적으로 객체를 해제할 필요가 없습니다. 자바 언어의 큰 장점이기도 합니다. 사용하지 않는 객체는 메모리에서 삭제하는 작업을 GC라고 부르며 JVM에서 GC를 수행합니다. 기본적으로 JVM의 메모리는 총 5가지 영역(class, stack, heap, native method, PC)으로 나뉘는데, GC는 힙 메모리만 다룹니다. 일반적으로 다음과 같은 경우에 GC의 대상이 됩니다. 객체가 NULL인 경우 (ex. String str = null) 블럭 실행 종료 후, 블럭 안에서 생성된 객체 부모 객체가 NULL인 경우, 포함하는 자식 객체 GC 동작원리 JVM에서 GC의 스케줄링을 담당하여 Java 개발자에게 메모리 관.. 2022. 4. 17.
객체 지향 설계 5가지 원칙 (SOLID) SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP : 단일 책임 원칙 (single responsibility principle) OCP : 개방-폐쇠 원칙 (open/ closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (interface segregation principle) DIP : 의존관계 역전 원칙 (dependency inversion principle) SRP(단일 책임 원칙) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것음 모호하다. - 클 수 있고, 작을 수 있다. - 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이.. 2021. 12. 26.
JVM 메모리 구조 메소드 영역 JVM 이 읽어들인 각각의 클래스와 인터페이스에 대한 런타임 정보, static 변수, 메소드 바이트코드 저장. JVM당 1개의 영역이 있으며 이는 공유된다. 힙영역 인스턴스 또는 객체를 저장. GC 대상으로 JVM 성능에 대한 이슈가 가장 많이 언급. JVM 당 하나의 영역만 존재하며 공유한다. 스택영역 모든 스레드에 대해 JVM은 여기에 저장된 하나의 런타임 스택을 만들게 된다. 이 스택을 활성화 레코드 / 스택프레임이라고 한다. 해당 메소드의 모든 로컬 변수는 프레임에 저장된다. 스레드가 종료된 후에는 런타임 스택이 JVM 에 의해 삭제된다. 공유되지 않는다. PC 레지스터 각 스레드 마다 존재하며, 스레드 시작시에 생성. JVM 이 수행할 명령어의 주소를 저장. 스레드의 현재 실행 명.. 2021. 12. 11.
Java8 List 중복값만 골라내기 List의 값들을 key/value 쌍인 Map으로 변환한다. Map 에서 value가 1개 이상인 Key값들을 Set에다가 저장. import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; /** * @author zzai_sang * @version 0.1.0 * @since 2020/07/14 */ public class DuplicateElement { public static void main(String[] args) { final List nameList = A.. 2020. 8. 9.