먼저, 둘의 공통점은 비교 기능에 대한 것이라는 점이다. 둘의 차이를 한마디로 정의하자면, 기본 기준(Comparable)과 추가 기준(Comparator)의 차이다. 서브웨이 메뉴판으로 예시를 들어보자. 기본적으로 사장님이 별도로 정하지 않는다면(귀차니즘) 가나다 순 정렬이 본사의 정책이라고 가정하자.기본 정책 적용 방법 : 객체에 Comparable 인터페이스 구현.public class Sandwich implements Comparable { private String name; private int rank; public Sandwich(String name, int rank) { this.name = name; this.rank = rank; } ..
Object Class란?모든 클래스의 최상위 부모 클래스이다.Java에서 만들 수 있는 모든 클래스는 Object 클래스를 기본으로 상속받고 있다. Object Class의 장점1. 공통 기능 제공 - 모든 객체에 필요한 기능을 미리 구현해 두었다. - 이로 인해 서로 다른 메소드의 이름으로 정의할 수 없게 제한을 둘 수 있다. - toString(), equals(), getClass() 정도 가 있다.2. 다형성의 기본 구현 - Object 클래스는 모든 클래스를 다 담을 수 있기 때문에 어떤 클래스든 Object 클래스로 받을 수 있다. Object Class로 할당했을 때의 단점1. 다운캐스팅을 통해 없는 메소드를 호출할 가능성이 있다.
Open-Closed PrincipleOpen for extension확장에는 열려있되,Closed for modification수정엔 닫혀있어야 한다. 이게 무슨 의미냐.새로운 기능 추가나 변경사항은 자유롭게 할 수 있고,기존의 코드는 건들지 않아도 되는 구조를 말한다. 기존 개발되어 있는 부분에 추가적인 기능을 넣는 나의 업무에 필수적인 원칙이다.강의의 예시 구조 이미지를 발췌해보겠다. 이러한 경우 Driver 클래스의 코드는 수정할 필요가 없다.새로 Car를 추가해야 하거나 Car에 기능을 추가해야할 때도 Driver 클래스의 코드는 수정될 필요가 없다.=> Closed for modification 그저 새로운 Car를 implement하는 클래스를 만들어 실행하면 된다.=> Open for e..
동시성 문제란 무엇일까? 전역 변수에 대한 수정이 여러 쓰레드에서 일어날 경우 값에 대한 변경이나 조회가 예측할 수 없는 방향으로 흘러가는 것을 말한다. 스프링 빈은 기본적으로 싱글톤으로 등록이 된다. 여러 쓰레드에서 하나의 빈에 대해 동시에 접근할 경우에도 동시성 문제가 발생한다. 예를 보자. Thread A에서 어떠한 로직으로 nameStore라는 전역 변수에 userA라는 이름을 저장한다. 이후 바로 Thread B에서 같은 로직으로 nameStore라는 전역 변수에 바로 접근해 userB라는 이름을 저장한다. 이 경우 각 쓰레드가 nameStore라는 전역 변수를 조회하게 되면 어떤 값이 조회될까? 당연히 userB라고 조회가 될 것이다. Thread A는 userA를 예상했지만 userB는 예상..
공유자원이란? 여러 쓰레드가 동시에 접근할 수 있는 자원을 의미한다. 임계영역이란? 공유자원들 중 여러 쓰레드가 동시에 접근했을 때 문제(경쟁상태)가 생길 수 있는 부분을 말한다. 공유자원 ) 임계영역 경쟁상태란? 둘 이상의 쓰레드가 공유자원을 병행적으로 읽거나 쓰는 동작을 할 때 타이밍이나 접근 순서에 따라 실행 결과가 달라지는 상황이다. 문제 상황 예시) Read - Modify - Write Thread 1) count = 0 [read] -> count = 1 [modify] -> count = 1 [write] Thread 2) --------------------- -> count = 0 [read] -> count = 1 [modify] -> count = 1 [write] 이러한 상황에서 ..
Wrapper Class란? 기본 자료형에 대한 클래스 표현이다. Primitive VS Wrapper Primitive는 기본 자료형을 의미한다. int, long, float, boolean과 같이 맨 앞의 이니셜이 소문자인 자료형이다. 초기화될 때에 0이나 false같이 유의미한 값으로 초기화된다. Wrapper는 영어의 의미대로 객체로 한번 감싼 자료형이다. int -> Integer, long -> Long처럼 맨 앞의 이니셜이 대문자인 자료형이다. 초기화될 때에 null로 빈객체로 초기화된다. Wrapper Class를 사용하는 이유 실제로 프로젝트를 진행 중에도 궁금했던 점이다. JPA @Id에 Long을 쓴 이유 김영한님의 강의를 보면 항상 @Id값에 @GeneratedValue를 해 au..
접근자는 변수 또는 메소드의 접근 범위를 설정해주기 위해 사용하는 Java의 예약어를 의미한다. 종류는 아래와 같이 4가지가 있다. public 어떤 클래스에서라도 접근 가능 protected 클래스가 들어있는 패키지 내 + 클래스를 상속받은 클래스(패키지 외부 포함) 접근 가능 default 클래스가 들어있는 패키지 내에서만 접근 가능 private 클래스 내부에서만 접근 가능 public > protected > default > private 순서로 범위가 작아진다.
오버라이딩과 오버로딩 둘 다 같은(중복된) 이름의 메소드에 대한 기능이다. 오버라이딩이란 부모 클래스/인터페이스에 존재하는 메소드를 자식 메소드에서 필요에 맞게 재정의하는 것을 말한다. 동적바인딩 된다는 특징이 있다. 동적바인딩이란? 런타임에 호출될 함수가 결정되는 것이다. interface Parent { public void method(); } class Child extends Parent { @Override public void method() { logic(); } } 해당 경우 Child에서 method()를 호출했을 때, Parent 클래스에 있는 method가 아닌 override된 Child 내의 메소드 로직이 실행된다. 오버로딩이란 같은 이름의 메소드지만 매개변수의 타입이 다르거나 ..