본문 바로가기

Java13

Interface vs Abstract Class 주제 내용을 알기전에 is-a 개념과 has-a 개념을 알고갑시다. 객체 지향적 관점 Is-a vs Has-a is-a 말 그대로 'A는 B이다'일 때의 '~이다'와 같습니다. 더보기 is-a는 추상화(형식이나 클래스와 같은)들 사이의 포함 관계를 의미하며, 한 클래스 A가 다른 클래스 B의 서브클래스(파생클래스)임을 이야기합니다. 다른 말로, 타입 A는 타입 B의 명세(specification)를 암시한다는 점에서 타입 B의 서브타입이라고도 할 수 있습니다. is-a 관계는 타입 또는 클래스 간의 has-a 관계와는 대조됩니다. has-a 및 is-a 관계들 간의 혼동은 실세계 관계 모델에 대한 설계에 있어 자주 발견되는 에러입니다. is-a 관계는 또한 객체 또는 타입 간의 instance-of 관계.. 2022. 4. 17.
Spring singleton vs Java static 큰 차이점은 Scope와 Thread Safe 여부이다. Java의 static은 ClassLoader 기준이고, Spring singleton은 ApllicationContext 기준이다. Tomcat을 was로 사용한다고 했을때, WebApplication별로 별도 클래스로더를 사용하여 동일 WebApplication끼리 공유할 수 있게 한다. 스프링 싱글톤은 DispatcherServlet 위에 등록된 ApllicationContext별로 공유하며 Spring IoC컨테이너에서 공유가 가능하다. 스프링 싱글톤은 IoC Container에 의해 Thread Safe를 자동으로 보장하게 되어 있다. 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.
스프링 @RequestParam 에서 Enum 으로 받기 스프링 RestController 구현 시 @RequestParam 에서 파라미터를 받을 때, Enum 클래스로 받고 싶을 경우가 있다. 1. enum 구현 (boolean 과 비슷한 enum 클래스) enum클래스는 기본 Ordinal로 순번이 매겨진다. 고로 0 : NO & 1 : YES 로 구성되어있다. 컨트롤러에서는 NO/YES or 0/1 로 받더라도 YesNo Enum클래스로 변환해서 받고 싶은 경우, 아래 create 메서드에서 정규식 체크를 해서 정수가 들어올 때는 정수를 변환, 반대 경우에는 String을 대문자로 바꾼 후 변환한다. @Getter public enum YesNo { NO("아니오"), YES("예"); private final String name; YesNo(Strin.. 2021. 2. 16.