가쟤의 해변일기 🐳

풀스택 과정 2주차 - Class DataType Array | MVC | 메소드 오버로딩 본문

풀스택과정

풀스택 과정 2주차 - Class DataType Array | MVC | 메소드 오버로딩

바닷가쟤 2025. 4. 21. 18:14

지난주 클래스 타입 배열 활용하기, 생성자 오버로딩을 배웠을 때는 코드 실습이 많아서 블로그에 올리지 못했다. 

서비스를 구조적으로 꼼꼼히 기획하고 구현하는 것을 3주차인 오늘 오전까지 했다.

이건 2주차 게시물 !


💡 2025 04 18 수업 이슈

1. Service 클래스 분리하기
2. 생성자 오버로딩
3. Class Type 배열 활용하기

 

Class DataType Array

  1. 선언
  2. 생성
  3. 초기화

동시에 하려면..

Account[] accounts = {new Account(1, 100), new Account(2, 300)… };

 

vo → value object 정보만 저장하는 객체

test 클래스 빼고 다 VO다.

test는 클라이언트 역할을 함 → 값 입력 받고 호출하는 데이터만 받아서 출력해야 한다.

확장성 있는 코드가 아니다 !

—> 기능만 모아둔 클래스 : 서비스 클래스, 매니저 클래스, 등등…

 

 

(SE) Test 클래스

1. Scanner로 값 입력
2. 함수 호출(서비스 요청)
3. 반환값 출력

위 세 가지만 작업해야 한다.

Test 클래스에서 로직이 돌아가면 안 된다 !

→ 기능만을 모아놓은 서비스 클래스를 추가적으로 작성해야 한다.

✅ (SE)
vo — service — test


✅ (EE)
Model — Controll —View
MVC 구조

has a 관계어떻게 되는지 중점적으로 보기.

 

그리고 메소드명(identifier)을 일관성 있게, 단수/복수형 유의해서 직관적으로 잘 작성해야 한다.

메소드는 동사를 앞에 붙이기 !

반환 받을 때 : getXXX

검색 : findXXX, searchXXX

public Customer findCustomer(Customer[] custs, int ssn) {
public Customer findCustomer(Customer[] custs, String addr) {
❌ public String findCustomer(Customer[] custs, String name) {

 

함수명이 같다 == 같은 기능 !

but 처리하는 파라미터, 데이터가 달라진다.

= Method Overloading !!

 

기능은 같지만 인자값이 조금씩 다르다.

return 타입은 다를 수 있다.

 

파라미터 가 Customer[] custs, String addr랑 Customer[] custs, String name 으로 값이 다르지만,

컴퓨터는 Customer[], String으로 같은 파라미터로 인식해서 사용할 수 없다!

 

/*
	 * Method Overloading Rule (규칙, 문법)
	 * 1. 메소드 이름은 반드시 같아야 한다.
	 * 2. 메소드 인자값은 반드시 달라야 한다.
	 * (순서, 갯수, 타입 중 하나라도 달라야 한다.)
	 * 3. 메소드 리턴 타입은 상관 없다.
	 */
	
	// 3. Outlet 안에 있는 고객들 중에서 특정 고객을 검색하는 기능
	public Customer searchCustomer(Customer[] customers, int ssn) {
		return null;
	}
	
	// 4. Outlet 안에 있는 고객들 중에서 "혜화동"에 거주하는 고객을 검색하는 기능
	public Customer[] searchCustomer(Customer[] customers, String address) {
		return null;
	}
package com.edu.service;

import com.edu.vo.Customer;
import com.edu.vo.Product;

// 아울렛에서 상품들을 구매하는 고객 관련 기능들만 모아놓은 서비스 클래스
// 데이터베이스와 연결되면 이후에 이 클래스는 DAO(Database Access Object)
// vo, test클래스 중간에 위치하므로 해당 클래스는 Controller 역할을 여기서 한다.

/*
 * 1. 서비스의 기능들을 주석으로 먼저 달아둔다.
 * 2. 모든 기능의 선언부만 먼저 작성한다.
 *   메소드 이름, 인자값, 반환 타입
 *   인자값과 반환 타입은 반드시 정확해야 한다.
 *   
 * 3. 메소드를 하나만 먼저 구현
 * 4. 테스트에서 호출해서 작성이 잘 되었는지 확인...
 * 	 다음 메소드 작성으로 넘어가 반복한다. (test에서 호출, 확인)
 */

public class OutletCustomerService {
	// 1. 특정 고객이 구매한 모든 상품을 반환하는 기능
	public Product[] getProducts(Customer customer) {
		return null;

	}

	// 2. 특정 고객이 구매한 모든 상품의 메이커만 반환하는 기능
	public String[] getProductsMaker(Customer customer) {
		return null;
	}
	
	
	/*
	 * Method Overloading Rule (규칙, 문법)
	 * 1. 메소드 이름은 반드시 같아야 한다.
	 * 2. 메소드 인자값은 반드시 달라야 한다.
	 * (순서, 갯수, 타입 중 하나라도 달라야 한다.)
	 * 3. 메소드 리턴 타입은 상관 없다.
	 * 
	 * 하는 일이 같지만(메소드 이름이 같다) 처리하는 데이터를 달리하는 기법
	 * 결론적으로 코드의 가독성을 높이는데 중요한 역할을 하는 기법
	 */
	
	// 3. Outlet 안에 있는 고객들 중에서 특정 고객을 검색하는 기능
	public Customer searchCustomer(Customer[] customers, int ssn) {
		return null;
	}
	
	// 4. Outlet 안에 있는 고객들 중에서 "혜화동"에 거주하는 고객을 검색하는 기능
	public Customer[] searchCustomer(Customer[] customers, String address) {
		return null;
	}
	
	// 5. 특정 고객이 구입한 물건 중에서 최고가에 해당하는 물건의 가격을 반환
	public int getMaxPrice(Customer customer) {
		return 0;
	}
	
	// 6. 모든 고객이 구입한 물건 중에서 특정 가격 이상 되는 상품을 반환
	public Product getProductOverPrice(Customer[] customer, int minPrice) {
		return null;
	}
}

 

Method Overloading Rule (규칙, 문법)

  1. 메소드 이름반드시 같아야 한다.
  2. 메소드 인자값반드시 달라야 한다. (순서, 갯수, 타입 중 하나라도 달라야 한다.)
  3. 메소드 리턴 타입은 상관 없다.

하는 일이 같지만(메소드 이름이 같다) 처리하는 데이터를 달리하는 기법

  • 결론적으로 코드의 가독성을 높이는데 중요한 역할을 하는 기법

Java Application 작업 시 어떤 순서로 클래스를 구현해야 하는가? 

  1. 어떤 것을 만들까?
  2. 어떤 vo 들이 필요할까?
  3. vo 들의 관계는 어떤 관계인가?
  4. Service 클래스의 메소드 선언부만 먼저 정의
  5. 메소드를 하나씩 구현 → test에서 하나씩 호출 → 하나씩 성공 여부 확인
728x90