수정입니다

<2주차> 객체, SOLID 본문

동문네트워크

<2주차> 객체, SOLID

nongdamgom 2024. 3. 31. 20:41

클래스란

  • 객체를 정의하는 틀, 껍데기, 설계도
  • 붕어빵 틀 
  • 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를 생성할 수 있게 된다.