본문 바로가기
💾 Backend/자바

💖객체지향 코딩하기💖

by 정람지 2023. 5. 8.

Ec.crew에서 객체지향/자바 스터디 - 4기 후반

객체 지향 프로그래밍

프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것

<->절차 지향


직접코딩연습해볼것

싱글톤패턴⭕️ / 업캐스팅다운캐스팅 / 추상화⭕️ / 템플릿 메소드⭕️ / 다형성 / 디폴트 메소트⭕️/ 정적 메소드⭕️ /오버로딩(+생성자)⭕️/다양한 접근제한자(+getter,setter)⭕️/오버라이딩⭕️/인터페이스⭕️/ 생성자상속~그냥상속~인터페이스다중상속~⭕️


1. 🍋싱글톤 패턴🍋

 

객체의 인스턴스가 오직 1개만 생성되는 패턴

인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용

 

 

이점

메모리 측면 : 

최초 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비를 방지

타 클래스 간 데이터 공유 용이 :

싱글톤 인스턴스가 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용가능

+ 도메인 관점에서 인스턴스가 한 개만 존재하는 것을 보증하고 싶은 경우 사용

 

단점

자식클래스를 만들수 없음

내부 상태를 변경하기 어려움

테스트하기 어려움

싱글톤 패턴을 구현하는 코드가 많이 필요함

 

만들기

private static으로 인스턴스 변수

private으로 생성자를 만들어 외부에서의 생성을 막음

 

방법 3가지 

1. Lazy Initialization (게으른 초기화)

2. Lazy Initialization + Double-checked Locking

3. Initialization on demand holder idiom (holder에 의한 초기화)

+참고

 

싱글톤 패턴(Singleton pattern) | 👨🏻‍💻 Tech Interview

싱글톤 패턴(Singleton pattern) 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴 즉, 싱글톤 패턴은 '하나'의 인스

gyoogle.dev


은체 싱글톤 패턴 만들어보기


2. 🍋추상클래스🍋

추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스

개발 설계용 - '선언부-반환값, 매개변수, 함수이름, 등'으로 구현 설계하기

 

 

 

"abstract" 예약어 ( 클래스/ 미구현 메소드)

추상메소드는 {} 대신 ; 사용 ({}도 메소드 구현한 것)

 

 

인스턴스 생성 불가! (하지만 형변환해서 사용은 가능)

추상 메서드를 하나라도 가진다면 그 클래스는 추상 클래스

+ 하지만 추상 메서드를 가지지 않아도 추상 클래스 가능 - 상속만을 위해 씀(new 예약어로 인스턴스 생성 불가능)

추상 메서드를 선언했다면 자식 클래스는 해당 메서드를 반드시 구현하도록 강제됨(구현하지 않을 시 자식도 추상클래스여야 함)

 

 

+추상클래스가 아닌 클래스는 concrete 클래스라고 함

+ uml에서 추상메소드/클래스 기울임꼴로 표시


추상클래스 추상메소드 / 구현한 자식클래스


3. 🍋템플릿 메소드 패턴🍋

어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화

실행 순서, 로직 흐름이 정해져있는 프레임워크에서 사용

코드를 변경하면 안 되기 때문에 final로 선언

 

전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
즉, 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용


템플릿 프로그래밍 메소드 - 개발자마다 코딩의 로직 동일

 


4. 🍋인터페이스🍋

(접근제한자) interface 인터페이스명{}

하위 클래스에서 implements 로 인터페이스 구현 

 

인터페이스를 구현한 클래스가 어떤 기능의 메서드를 제공하는지 명시하는 것

다른 클래스를 작성하는데 도움을 주는 목적

 

구현된 게 없는 기본 설계도

 

 

인스턴스 생성 불가

 

클래스가 여러 인터페이스를 다중상속 받을 수 있음

인터페이스가 여러 인터페이스를 다중상속 받을 수 있음

 

변수: 상수 (public static final, 생략가능)

메서드: 추상 메서드 (public abstract, 생략 가능)

+ 디폴트 default 메서드 : 인터페이스에서 구현 코드까지 작성한 메소드 (재정의 가능)

+ 정적 static 메서드 : 인스턴스 생성과 상관없이 사용할 수 있는 메소드 (인터페이스 이름으로 직접 참조하여 사용.newX)

 

 

+ private 메서드 : 다른 메소드에서 호출하는 형식으로 사용( 인터페이스 내에서만 사용 가능)(private static 가능)

일반 메서드, 일반 변수 불가


인터페이스 연습

+

인터페이스 VS 추상클래스

 

[JAVA] 추상클래스와 인터페이스의 차이

추상클래스(Abstract Class)란? 추상 클래스(Abstract Class)는 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 이러한 특성 탓에 미완성 설계도라

code-lab1.tistory.com


+

@ Override 어노테이션

부모클래스에 똑같은 함수 이름이 없으면 에러가 나게 해주는 기능 (실수 방지)

 

final 예약어

더 이상 변경할 수 없음

변수 : 상수(변경 불가)

메서드:  오버라이딩 불가능. 상속 받은 그대로 사용

클래스: 상속 확장 불가능. 하위클래스를 만들 수 없음

 

+ static

 메모리(스택)에 한번 할당되어 프로그램이 종료될 때 해제

 

+ instanceof

원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드이다. 맞으면 true 아니면 false를 반환/ 해당 클래스의 상위 클래스로 체크해도 참

(다운캐스팅 시 안전하게 변환하기 등에서 사용)