자바의 정석으로 java공부하기! 일부만 작성
오버라이딩과 오버로딩의 차이점
오버라이딩은 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것
오버로딩은 같은 이름의 메소드를 변수 타입이나 개수가 다르게 정의하는 것
java의 원시타입(byte)
정수형 byte(1), short()2, int(3), long(4)
실수형 float(4), double(8)
문자형 char(2)
논리형 boolean(1)
java의 참조타입
기본 타입을 제외한 타입으로 객체의 주소를 저장하는 타입이다. 문자열, 배열, 열거형 상수, 클래스, 인터페이스 등
불변객체란?
불변 객체는 객체 생성 이후 내부의 상태가 변하지 않는 객체이다.
Java에서는 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고, 참조 타입일 경우엔 추가적인 작업이 필요하다.
불변 객체 혹은 final을 사용하는 이유
1. Thread-Safe하여 병렬 프로그래밍에 유용하며, 동기화를 고려하지 않아도 된다.
(공유 자원이 불변이기 때문에 항상 동일한 값을 반환하기 때문)
2. 실패 원자적인 메소드를 만들 수 있다.
(어떠한 예외가 발생되더라도 메소드 호출 전의 상태를 유지할 수 있어 예외 발생 전과 똑같은 상태로 다음 로직 처리 가능)
3. 부수효과를 피해 오류를 최소화 할 수 있다.
※ 부수효과 : 변수의 값이 바뀌거나 객체의 필드 값을 설정하거나 예외나 오류가 발생하여 실행이 중단되는 현상
4. 메소드 호출 시 파라미터 값이 변하지 않는다는 것을 보장할 수 있다.
5. 가비지 컬렉션 성능을 높일 수 있다.
(가비지 컬렉터가 스캔하는 객체의 수가 줄기 때문에 Gc 수행 시 지연시간도 줄어든다.)
추상클래스와 인터페이스의 공통점과 차이점
공통점 : 추상메소드를 가지고 있다(미완성 설계도), 일부만 미완성
차이점 : 인터페이스는 iv를 가질 수 없다, 추상메소드의 집합이다.
추상클래스는 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 것
추상 메소드를 가지고 있으며 일반 클래스와 생성자를 포함하고있다. 부분적으로만 완성된 '미완성 설계도'
인터페이스는 추상메소드의 집합으로 구현된 것이 전혀 없는 설계도, 껍데기(모든 멤버가 public).
싱글톤 패턴
단 하나의 인스턴스를 생성해 사용하는 디자인 패턴으로 인스턴스가 1개만 존재해야 한다는 것을 보장하고 싶은 경우와, 동일한 인스턴스를 자주 생성해야 하는 경우에 주로 사용한다(메모리 낭비 방지).
싱글톤 패턴의 대표적인 예시
Spring Bean이 있다.
스프링의 빈 등록 방식은 기본적으로 싱글톤 스코프이고, 스프링 컨테이너는 모든 빈들을 싱글톤으로 관리한다.
스프링은 요청할 때마다 새로운 객체를 생성해서 반환하는 기능도 제공한다. (프로토타입 빈, @Scope("prototype"))
출처 및 참고
자바의 정석
'공부 기록' 카테고리의 다른 글
@RequestBody, @RequestParam, @ModelAttribute (0) | 2023.04.27 |
---|---|
자료구조 (0) | 2023.04.25 |
인프라(Infra)? (0) | 2023.04.01 |
SaaS? (0) | 2023.03.30 |
스트림(Stream) (0) | 2023.03.21 |
댓글