감사쟁이야
감사쟁이의 성장기록
감사쟁이야
  • 분류 전체보기 (130)
    • Java-Spring (0)
    • ComputerScience (0)
    • Project (64)
      • TIL, WIL (57)
      • Project Retrospect (7)
    • Problem Solving (63)
    • Book Review (1)
    • Culture & Discovery (0)
    • Daily Log (2)

블로그 메뉴

  • 홈
  • 깃허브
  • 방명록
hELLO · Designed By 정상우.
감사쟁이야

감사쟁이의 성장기록

TIL(37) 21-11-09 : Object Oriented Programming
Project/TIL, WIL

TIL(37) 21-11-09 : Object Oriented Programming

2021. 11. 9. 23:50

💫  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
    'Project/TIL, WIL' 카테고리의 다른 글
    • TIL(39) 21-11-15 : 도커를 사용해서 컨테이너를 구성해보기
    • TIL(38) 21-11-10 : Spring Security + OAuth2
    • TIL(36) 21-11-08 : Spring DI / IoC
    • TIL(35) 21-11-05 : Spring은 고마운 친구
    감사쟁이야
    감사쟁이야
    sunzero0116@gmail.com

    티스토리툴바