수정입니다
<2주차> 객체, SOLID 본문
클래스란
- 객체를 정의하는 틀, 껍데기, 설계도
- 붕어빵 틀
- field와 method를 가질 수 있다.
객체란
- object : 다른 것과 식별 가능한 자기만의 속성을 가진 개체
- instance랑 혼용되어서 사용, 하지만 object가 좀 더 일반명사적인 개념이라고 생각하면 될 듯
인스턴스란
- 붕어빵 틀을 통해 찍어낸 하나 하나의 붕어빵들
- 클래스의 객체라고 보면 된다.
- 하나의 클래스로부터 서로 다른 특성의 붕어빵(팥붕, 슈붕..)을 만들어 낼 수 있다.
메서드란
- 클래스 내의 함수
- 어떠한 객체의 여러 동작들을 method로 만들어 낼 수 있다.
- 각 instance들은 method를 통해 서로 상호작용 한다.
- 특별히 class method와 instance method로 구분됨
- class method : static 키워드를 가진 method. instance를 만들지 않고도 class level에서 사용할 수 있다.
- instance method: static이 없는 method. instance를 통해서만 사용이 가능하다.
상속이란
- 부모 클래스의 field와 method를 물려받는 자식 class가 존재할 때, 상속이라고 한다.
- 상속 관계에 있을 때, 그대로 물려받는 것이 아닌 overriding을 핤 수 있다.
- overriding : 부모 클래스의 method를 재정의 하는 것. method의 이름, parameter, return 값이 모두 같아야한다.
* overloading : 상속상황이 아닌, 일반적인 하나의 class 내에서 사용. 동일한 class에서, 이름은 같고 parameter가 다른 method를 여러개 지정할 수 있다. (return 타입은 아무래도 상관 없다.)
Getter와 Setter
- Getter : 외부에서 private한 멤버 변수에 접근하려고 할 때, 직접 접근을 막고 getter을 통해서 readonly로 제공하는 방식
- Setter : class의 멤버 변수 값을 외부에서 지정해야 할 때 사용해서, 부적절한 값의 입력을 막고, 유효한 값만 넣도록 보호하는 방식.
싱글톤 패턴
- 특정 클래스가 단 하나의 instance만을 생성하여 계속 그 instance를 재사용하는 방식
- 장점 : 메모리 절약, 객체 공유가 쉬
- 단점 : multi-threading에서의 syncronization 문제, 테스트하기 어려움, 객체간의 결합도 증가
- 스프링은 왜 빈을 싱글톤으로 생성할까...
- ==> 웹 같은 경우에는 1초에도 수십 수백개의 요청이 들어올 수 있음, 그때마다 객체를 생성한다면 과부하가 걸릴 확률이 높다.==> 서버 환경에서는 싱글톤 사용이 권장된다.
final 클래스와 final 메서드
- final class : 다른 클래스가 상속할 수 없는 클래스
- final method : overriding을 못하게 막아놓은 method
다형성
- Polymorphism
- 상위클래스 타입의 변수를 이용해서 하위 클래스 객체를 생성할 수 있게 해주는 방식
List<Object> list = new ArrayList<Object>();
- 유지보수가 쉽고 재사용성이 증가한다.
- => 자식 객체 타입이 다른 자식으로 변경될 가능성이 있을 때, 어차피 변수는 부모 타입이라 호환이 가능하다
- => 객체 타입을 부모 타입으로 통합하면 관리가 쉬워짐 (메소드 인자 던질 때 다 부모로 받으면 되니까)
추상 클래스
- abstract class
- 하나이상의 abstract method를 포함하는 class
- abstract method : 자식 class가 반드시 overriding 해야만 사용할 수 있는 method
==> 반드시 사용해야 하는 method를 abstract class의 abstract method로 정의 해놓으면, 이 class를 상속받는 모든 class는 이 abstract method를 overriding 해야지 자식 class의 instance를 생성할 수 있게 된다.
'동문네트워크' 카테고리의 다른 글
JPA를 통한 엔티티 설계, 매핑 & 프로젝트 파일 구조 이해 (0) | 2024.06.04 |
---|---|
API URL 설계 & 프로젝트 세팅 (0) | 2024.05.27 |
DB 설계, 실전 SQL (0) | 2024.05.10 |
배열, 제네릭, 람다, 예외처리 (0) | 2024.05.06 |
<1주차>깃 사용법, 자바 기초(반복문, 제어문), java, IntelliJ 세팅 (0) | 2024.03.22 |