💫 Facts
✅ 객체지향에 대해 나만의 언어로 정립하기
✅ 쿠키와 세션 이해
✅ 스프링 시큐리티를 통해 로그인, 회원가입 기능 구현
💫 Findings
🧩 객체지향
(1) 클래스, 인스턴스, 메소드
✏️ 클래스 : 표현하고자 하는 대상의 공통 속성을 한 군데에 정의해 놓은 것이다.
즉, 객체의 속성을 정의해 놓은 것을 말한다.
✏️ 인스턴스 : 어떠한 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
✏️ 메소드 : 어떤 작업을 수행하는 코드를 하나로 묶어 놓은 것을 말한다.
(2) 생성자
✏️ 생성자 : 인스턴스가 생성될 때 사용되는 '인스턴스 초기화 메소드'다.
생성자를 이용해서 인스턴스가 생성될 때 수행할 동작을 코드로 짤 수 있다.
대표적으로 인스턴스 변수를 초기화 하는 용도로 사용한다.
- 생성자의 형식
클래스이름 (타입 변수명, 타입 변수명, ...){
인스턴스 생성 될 때에 수행하여할 코드
변수의 초기화 코드
}
(3) 접근제어자
✏️ 접근 제어자 : 멤버 변수/함수 혹은 클래스에 사용되며 외부에서의 접근을 제한하는 것
- 종류
→ private : 같은 클래스 내에서만 접근이 가능
→ default(nothing) : 같은 패키지 내에서만 접근이 가능
→ protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능
→ public : 접근 제한이 전혀 없음
- 왜 접근 제어자를 사용하지?
- 객체지향 프로그래밍이란 객체들 간의 상호작용을 코드로 표현하는 것이다.
- 이때 객체들간의 관계에 따라서 접근 할 수 있는 것과 아닌 것, 권한을 구분할 필요가 생긴다.
- 클래스 내부에 선언된 데이터의 부적절한 사용으로부터 보호하기 위해서! = 캡슐화(encapsulation)
- 접근 제어자는 캡슐화가 가능할 수 있도록 돕는 도구다.
(4) 상속, 추상클래스
✏️ 상속 : 기존의 클래스를 재사용하는 방식 중의 하나다.
부모 클래스에서 정의된 필드와 메소드를 물려받는다.
새로운 필드와 메소드를 추가할 수 있다.
부모 클래스에서 물려받은 메소드를 수정할 수 있다. (= 오버라이딩)
- 상속을 통해 클래스간의 계층구조를 만들게 된다.
- 참고 : 상속을 받을 때 여러 클래스를 상속받을 수는 없다! 오직 하나의 클래스만을 상속받을 수 있다.
✏️ 추상클래스 : 추상메소드를 선언할 수 있는 클래스
- 추상메소드 : 설계만 되어있으며 수행되는 코드에 대해서는 작성이 안된 메소드
- 미완성으로 남겨두는 이유 :
- 상속받는 클래스 마다 반드시 동작이 달라지는 경우에
상속받는 클래스 작성자가 반드시 작성하도록 하기 위함이다.
(5) 인터페이스
✏️ 인터페이스 : 구현하려는 객체의 행동을 정의하는 간단한 문법
✔️ 인터페이스는 함수의 특징(method signature)인 접근제어자, 리턴타입, 메소드 이름만을 정의한다.
함수의 내용은 없다.
✔️ 인터페이스를 구현하는 클래스는 인터페이스에 존재하는 함수의 내용을 반드시 구현해야한다.
(6) 코드 재사용성 → 상속 ❌ 인터페이스 ⭕️
코드를 재사용하기 위해서, 상속보다는 합성(인터페이스)를 사용한다.
🤔 그 이유는 무엇일까?
❗️ 상속은 캡슐화를 위반한다.
📖 그러므로, 명저인 Java Effective 책에서는
"상속보다는 합성을 사용하라.", "추상클래스 보다는 인터페이스를 우선하라." 라고 한다.
💡 합성은 다른 객체의 인스턴스를 자신의 인스턴스 변수로 포함해서 재사용하는 방법이다.
쉽게 말하면, 객체를 참조할 때, 인터페이스를 사용해 참조하는 방법이다.
💡 인터페이스는 정의된 메서드를 통해서만 재사용이 가능하기 때문에
구현을 효과적으로 캡슐화할 수 있으며, 참조되는 인스턴스를 교체하는 것이 비교적 쉽기 때문에
설계를 유연하게 만들어준다.
📝 출처
- 이펙티브 자바 Effective Java 3/E (아이템 18-20)
'Project > TIL, WIL' 카테고리의 다른 글
TIL(39) 21-11-15 : 도커를 사용해서 컨테이너를 구성해보기 (0) | 2021.11.15 |
---|---|
TIL(38) 21-11-10 : Spring Security + OAuth2 (0) | 2021.11.10 |
TIL(36) 21-11-08 : Spring DI / IoC (0) | 2021.11.09 |
TIL(35) 21-11-05 : Spring은 고마운 친구 (0) | 2021.11.05 |
TIL(34) 21-11-04 : JPA를 이용하여 CRUD 기능 구현 (0) | 2021.11.04 |