본문 바로가기
개발하자

Java CS 지식 정리

by 밈밈무 2022. 7. 4.

1. 객체지향이란?

더보기

클래스라는 틀에서 생겨난 실체를 객체라고 하며, 객체지향 프로그래밍은 객체들 간의 상호작용으로 이루어진다. 객체 지향 모델링은 기능이 아닌 객체가 중심이 되며 각각의 역할을 정의해나가는 것에 초점을 맞춘다.

  • 객체 지향 프로그래밍의 특징
    • 추상화 : 객체들의 공통적인 특징을 도출
    • 캡슐화 : 실제로 구현되는 부분을 외부에 드러나지 않도록 정보 은닉
    • 상속성 : 하나의 클래스가 가진 함수와 데이터를 다른 클래스가 그대로 물려 받아 기존 코드 재활용
    • 다형성 : 오버라이딩(부모클래스-자식클래스), 오버로딩(매개변수 다르게)을 통해 동일 이름의 함수를 다른 방법으로 동작
    • 동적바인딩 : 가상 함수를 호출하는 코드를 컴파일할 때 바인딩을 실행시간에 결정. 프로그램의 유연성 up, 다형 개념 실현
  • 의존성 관리
    • 변경 영향 최소화
    • 독립적인 배포, 개발 가능
    • DIP(Dependency Inversion Principle, 의존관계 역전 법칙) : DIP 통해 고수준 정책(high level policy)와 저수준 구현 세부사항(low level details)의 분리

2. 클래스와 객체는 무엇인가?

더보기
  • 클래스 : 객체를 정의하는 틀(or 설계도)
  • 객체 : 식별 가능한 개체 또는 사물. 클래스라는 틀에서 생겨난 실체. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 인스턴스들을 통칭하는 용도로 사용

3. 오버라이딩과 오버로딩이란?

더보기
  • 오버라이딩
    • 자식클래스가 부모클래스로부터 상속받은 메소드를 재정의하는 것.
    • 런타임 다형성이기도 하다.
    • 부모보다 좁은 접근 제어자를 가질 수 없다.
    • @Override : 컴파일 타임에 오버라이딩에 대한 안정성을 부여 → 필수는 아니지만 필수로 써주자
  • 오버로딩
    • 같은 클래스 내에서 동일한 메소드명을 가지지만, 매개변수의 타입 또는 개수를 다르게 하여 구현.
    • 컴파일 타임 다형성이기도 하다.
    •   ⇨ 동일한 기능을 하는 메소드를 하나의 이름으로 처리할 수 있다
  • 차이
  오버라이딩 오버로딩
범위 클래스 상속 관계 같은 클래스 내
메소드명 원 메소드와 동일 원 메소드와 동일
매개변수 원 메소드와 동일해야 한다 원 메소드와 달라야 한다
리턴타입 원 메소드와 동일해야 한다 달라질 수도 있고 같을 수도 있다
접근제어자 원 메소드보다 넓거나 같은 범위를 가져야 한다 달라질 수도 있고 같을 수도 있다

4. 접근제어자의 종류와 설명

더보기
  • 종류
    • public > protected > defalult > private
    • public : 전체 영역에서 접근 가능
    • protected : 동일 패키지 + 상속한 클래스에서 접근 가능
    • default : 동일 패키지에서 접근 가능
    • private : 해당 클래스에서만 접근 가능
  • 접근 제어자를 사용하는 이유
    • 외부에 보여주고 싶은 정보들을 선택적으로 제공하기 위함
    • 캡슐화와 통함(private)

5. 강한 결합과 느슨한 결합

더보기
  • 결합도 : 의존성의 정도, 다른 모듈에 대해 얼마나 많은 정보를 알고 있는지
    • 객체지향 관점에서 결합도는 객체 또는 클래스가 협력에 필요한 적절한 수준의 관계만을 유지하고 있는지를 나타냄
  • 강한 결합도 : 어떤 모듈이 다른 모듈에 대해 너무 자세한 부분(구현 세부사항)까지 알고 있을 경우  → 지양
  • 느슨한 결합도 : 어떤 모듈이 다른 모듈에 대해 필요한 정보만(인터페이스로 추상화된 고수준 정책) 알고 있는 경우

6. SOLID(객체지향 5대원칙)

더보기
  1. SRP(단일책임원칙) : 한 클래스가 하나의 책임만 가짐
  2. OCP(개방-폐쇄원칙) : 확장에는 열려있고 / 변경에는 닫혀 있음 & 다형성 활용
  3. LSP(리스코프 치환 원칙) : 프로그램의 객체가 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함. 상위타입을 상속해서 재정의 했을 때 프로그램이 깨지지 않아야 한다.
  4. ISP(인터페이스 분리 원칙) : 클라이언트가 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안됨. 범용 인터페이스 하나 보다는 특정 클라이언트를 위한 여러 개의 인터페이스가 더 바람직. 비대한 인터페이스보다는 작고 구체적인 인터페이스로 분리해야 한다.
  5. DIP(의존관계 역전 원칙) : 추상적인 것은 자신보다 구체적이거나 변화하기 쉬운 것에 의존해서는 안 됨. 구현 클래스에 의존하지 않고 인터페이스에 의존해야 한다.