Language/Java
-
[Java] 객체지향 설계 5원칙 - SOLID란 무엇일까?Language/Java 2021. 8. 21. 00:25
객체지향 설계 5원칙 SOLID 객체 지향 설계의 정수라고 할 수 있는 5원칙이 집대성됐는데, 바로 SOLID 입니다. SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Priciple): 개방 폐쇄 원칙 LSP(Listov Substitution Priciple): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 SRP - 단일 책임 원칙 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. - 로버트 C.마틴 위의 남자 클래스를 보면 그냥 보아도 이 사람이 해야 할 역할, 책임이 매우 많은 ..
-
[Java] 인터페이스와 추상 클래스 차이는 무엇일까?Language/Java 2021. 8. 7. 01:47
인터페이스와 추상 클래스 차이는? 이번 글에서는 인터페이스와 추상 클래스의 차이에 대해서 정리해보겠습니다. 실제로 이 질문은 면접에서도 자주 물어보는 질문이고, 약간 알듯 말듯 한데 대답하기는 애매한 주제라 한번 각각 특징에 대해서 정리해보고 둘의 차이를 정리 해보겠습니다. 추상 클래스 클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도에 비유할 수 있습니다. 추상 클래스는 키워드 abstract를 붙이기만 하면 됩니다. public abstract class Test {} 추상 클래스는 추상 메소드를 0개 이상 가지고 있다는 것을 제외하고는 일반 클래스와 전혀 다르지 않습니다. 추상 메소드는 간단하게 말하면 선언부는 있는데 구현부가 없는 메소드를 의미합니다. public class 쥐 extend..
-
[Java] Checked Exception vs Unchecked Exception 정리Language/Java 2021. 6. 28. 11:34
체크 예외와 언체크 예외(Checked, Unchecked Exception) 자바의 예외는 크게 3가지로 나눌 수 있습니다. 체크 예외(Checked Exception) 에러(Error) 언체크 예외(Unchecked Exception) 자바에서 에러, 예외 관련된 클래스들의 계층구조는 위와 같습니다. Throwable 클래스를 기준으로 Error, Exception 클래스로 나뉘어집니다. 왼쪽에 보이는 Error는 말 그대로 에러와 관련된 클래스입니다. 그리고 오른쪽에 보이는 Exception 도 말 그대로 예외와 관련된 클래스입니다. 자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 에러(error)와 예외(exception) 두 가지로 구분하였습니다. 에러(Error)란? 에러는..
-
[Java] 자바에서 Generic 이란 무엇일까?Language/Java 2021. 5. 25. 11:16
제네릭(Generic)이란? 자바의 제네릭(Generic)은 형 변환시에 발생할 수 있는 문제들을 사전에 없애기 위해서 만든 것입니다. 아직은 어떤 말인지 와닿지 않을 수 있습니다. 바로 예제 코드를 보면서 제네릭에 대해서 알아보겠습니다. public class CastingDTO { private Object object; public void setObject(Object object) { this.object = object; } public Object getObject() { return object; } } public class GenericSample { public static void main(String[] args) { GenericSample sample = new GenericS..
-
[Java] Java Synchronized Lock의 범위는?Language/Java 2021. 2. 11. 20:50
Synchronized 키워드 Lock의 범위는 어떻게 될까? Synchronized 키워드의 lock 범위는 어떻게 될까요? 라는 질문을 들으면 어떤 대답을 할 수 있을까요? 정답을 말하기 전에 예제 코드를 보면서 알아보겠습니다. public class MusicExam { public static void main(String[] args) { MusicBox box = new MusicBox(); MusicPlayer musicPlayer1 = new MusicPlayer(1, box); MusicPlayer musicPlayer2 = new MusicPlayer(2, box); musicPlayer1.start(); musicPlayer2.start(); } } public class MusicB..
-
[Java] ConcurrentHashMap 이란 무엇일까?Language/Java 2021. 2. 11. 20:44
들어가기 전에 HashTable, HashMap, ConcurrnetHashMap은 많이 유사한 특징들을 가지고 있습니다. 하지만 세부적으로 보면 조금씩 꽤나 차이가 있는데요. 간단하게 어떤 차이가 있는지 알아보면서 시작하겠습니다. Hashtable 클래스 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable { public synchronized int size() { } @SuppressWarnings("unchecked") public synchronized V get(Object key) { } public synchronized V put(K key, V value) { } } Hashta..
-
[Java] 직렬화(Serialization)란 무엇일까?Language/Java 2021. 1. 30. 01:39
Serializable에 대해서 알아보기 직렬화라는 용어에 대해서 들어만 보고 공부해본 적은 없는데 이번 기회에 정리를 하게 되었습니다,, 이번 글에서는 직렬화에 대해서 알아보겠습니다. public interface Serializable { } Serializable의 인터페이스를 보면 메소드가 하나도 없는 것을 볼 수 있습니다. 아무런 구현해야 할 메소드도 없는 이 인터페이스가 도대체 왜 있는 것일까요? 개발을 하다 보면 아래와 같은 경우가 존재합니다. 생성한 객체를 파일로 저장할 일이 있을 수도 있습니다. 저장한 객체를 읽을 일이 생길 수도 있습니다. 다른 서버에서 생성한 객체를 받을 일도 생길 수 있습니다. 이럴 때 꼭 필요한 것이 Serializable 입니다. 우리가 만든 클래스가 파일에 읽거..
-
[Java] Generic Type erasure란 무엇일까?Language/Java 2021. 1. 26. 16:55
들어가기 전에 이번 글에서는 Generic Type erasure에 대해서 알아보겠습니다. 저에게는 쉽지 않은 내용입니다 ㅠㅠ 하지만 중요한 내용이니 정리를 열심히 해보겠습니다. 제네릭 은 JDK 1.5에 도입되었습니다. 제네릭을 공부해보셨으면 확실히 버그에 대한 처리와 좀 더 안정적이고 편리하게? 개발을 할 수 있다는 것을 느낄 수 있었을 것입니다. 이렇게 제네릭이 5버전 부터 나왔기에, 하위 버전과의 호환성 유지를 위한 작업이 필요했습니다. 따라서 코드의 호환성 때매 소거(erasure) 방식을 사용하게 됩니다. 제네릭과 배열의 차이를 2가지만 간단하게 알아보면서 소거방식에 대해 정리해보겠습니다. 첫 번째 배열은 공변이고, 제네릭은 불공변입니다. 저번 글에서도 정리한 적이 있는데요 한번 더 정리하고 ..