본문 바로가기

개인프로젝트

[내가 만든 프로젝트 코드 분석 | 모모 : 모임의 모든것 | 2.백엔드구성] JAVA의 객체지향프로그래밍과 제네릭

1. 객체지향프로그래밍

  1. 자바는 객체지향프로그래밍 언어로 분류되며 프로그램을 객체 단위로 구성하고 객체 간의 상호작용을 중심으로 하는 개발 패러다임입니다. 객체는 데이터와 해당 데이터를 처리하는 메서드를 함께 묶어서 표현하며 프로그램을 모듈화하고 재사용성을 높이는 데에 도움을 줍니다.
  2. 클래스는 객체를 만들기 위한 설계도 혹은 틀로 변수(속성)과 메서드(동작)로 이루어지고 객체는 클래스의 인스턴스로 실제로 메모리에 할당된 데이터입니다. 클래스에서 정의한 속성과 메서드를 사용할 수 있으며 각 객체는 독립적인 상태를 가집니다.
  3. 캡슐화는 관련된 데이터와 메서드를 하나의 단위로 묶고 외부에서의 직접적인 접근을 제어하는 개념입니다. 캡슐화를 통해 객체의 내부 구현을 숨기고 외부에 필요한 인터페이스만을 제공함으로써 코드의 유지보수성을 높입니다.
  4. 상속은 이미 존재하는 클래스를 기반으로 새로운 클래스를 만들 수 있는 기능으로, 부모 클래스의 특성(변수와 메서드)을 자식 클래스가 상속받아 재사용할 수 있게 합니다. 이를 통해 코드의 중복을 줄이고 계층적인 구조를 형성할 수 있습니다.
  5. 다형성은 하나의 코드가 여러 가지 형태를 가질 수 있는 특성으로 메서드 오버로딩과 메서드 오버라이딩을 통해 구현됩니다. 다형성을 활용하면 유연하고 확장 가능한 코드를 작성할 수 있습니다.
  6. 추상화는 복잡한 시스템을 단순화하여 필요한 부분에만 집중할 수 있게 하는 개념입니다. 클래스와 인터페이스를 통해 추상화를 구현하며 이를 통해 사용자는 구체적인 구현 내용을 몰라도 필요한 기능을 사용할 수 있습니다.
  7. 인터페이스는 클래스에서 구현해야 하는 메서드의 명세를 정의하는 역할을 합니다. 다중 상속을 지원하고, 클래스 간의 표준화된 통신을 가능하게 하여 유연성을 확보합니다.

2. 제네릭 ResultData<DT>

@Data
public class ResultData<DT> {

	private String resultCode;
	private String msg;
	private String data1Name;
	private DT data1; //데이터타입 결정부분
	
	public static <DT> ResultData<DT> from(String resultCode, String msg) {
		return from(resultCode, msg, null, null);
	}

	public static <DT> ResultData<DT> from(String resultCode, String msg, String data1Name, DT data1) {
		ResultData<DT> rd = new ResultData<>();
		rd.resultCode = resultCode;
		rd.msg = msg;
		rd.data1Name = data1Name;
		rd.data1 = data1;

		return rd;
	}
}

제네릭(Generics)은 클래스나 메서드에서 사용할 데이터 타입을 미리 지정하지 않고 실행 시점이 아닌 컴파일 시점에 타입을 결정할 수 있게 해줍니다. 제네릭을 사용하면 코드의 유연성과 재사용성을 높일 수 있습니다.

프로젝트에서는 유저나 모임 데이터에 대해 결과값을 반환할 때와 ajax사용에 있어서 제네릭을 사용하였습니다.

  • 제네릭은 관례적으로 쓰이는 타입들이 있고 필요한 타입을 <>에 넣어서 사용하면 됩니다. ResultData<DT>를 사용하여 사용할 데이터 타입을 내부에서 정하지 않고 외부에서 정할 수 있게 하였습니다.
  • data1에 해당하는 데이터에 따라서 메서드의 데이터타입을 결정하였습니다.

ResultData 클래스는 제네릭(Generics)을 사용하여 일반적인 형태의 결과 데이터를 표현하는 클래스입니다. 제네릭스는 클래스나 메서드를 정의할 때 사용되며 타입을 파라미터화하여 코드의 재사용성과 타입 안정성을 높이는 데에 도움을 줍니다.

 여기서 사용된 제네릭은 <DT>로 표현되어 있습니다. DT는 제네릭 타입 파라미터로, 어떠한 데이터 타입이든 올 수 있습니다. 이렇게 하면 ResultData 클래스를 사용할 때 실제 데이터 타입을 정할 수 있습니다.

클래스 선언

  • 클래스 선언에서 <DT>는 제네릭 타입 파라미터를 나타냅니다.
  • <DT>는 데이터 타입을 지정하는 데에 사용되며, ResultData 클래스 내에서 해당 타입을 사용할 수 있습니다.

인스턴스 변수

  • data1 변수의 타입이 DT로 지정되어 있습니다. 이는 해당 변수가 어떤 데이터 타입이든 받을 수 있음을 나타냅니다.
  • data1Name 변수는 데이터1에 해당하는 데이터의 이름을 나타냅니다. 여기서는 문자열로 지정되어 있습니다.

메서드 시그니처

  • from 메서드의 반환 타입인 ResultData<DT>에서도 제네릭 타입을 사용하고 있습니다.
  • 메서드의 파라미터 DT data1는 메서드에 전달되는 데이터1의 타입을 나타냅니다.

제네릭 메서드

  • from 메서드와 같이 제네릭 타입을 사용하는 메서드를 제네릭 메서드라고 합니다.
  • 제네릭 메서드는 메서드 선언에서도 제네릭 타입을 사용하며, 이 경우에는 <DT>가 메서드 반환 타입 앞에 위치하고 있습니다.