4주차 - 메서드 method (1)

2022. 9. 3. 15:06Java/java

메서드란

객체 지향 프로그래밍에서 객체와 관련된 서브 루틴 (또는 함수)

출처 : 위키백과 - 메소드

 

나같은 초보들이 이해하기에 사전적 정의는 이해하기 어렵다.쉽게 이해하자면 클래스 내부에 있는 기능들을 부르는 명칭이 메서드이다.

 

아래는 클래스에서 메서드를 만드는 예시

import java.util.ArrayList;

public class SubClass02 {
	//method1() 이라는 메서드를 만드는 구문
	public void method1() {
		System.out.println("SubClass 멤버로 구성된 method1");
	}
    
    // method2() 라는 메서드를 만드는 구문
	public static void method2() { 
		System.out.println("SubClass1 멤버로 구성된 method2");
	}
	// void는 return하는 데이터가 없다는 의미이다.
	// public '자료형' 을 사용하면 '자료형'에 맞는 return 값을 지정해줘야한다.
	
	
/*	아래 코드의 입력 구조
	접근 제어자-반환자료형-메서드이름(매개변수,매개변수)
*/	public int method3() { 
	// int 의 위치에 있는 값을 '반환자료형' 이라 부른다.
		int data = 100, data2= 200;
		return data; 
		// return 뒤의 데이터를 반환한다. 이때 데이터는 하나만 반환가능하다.
		
		/*	여러 데이터를 반환하고 싶을 때에는 배열을 사용할 수 있다.
		 *	같은 자료형일때 : 배열, 컬렉션
		 *	다른 자료형일때 : 컬렉션, 사용자정의 클래스{exam) MemberDTO} 
		 */
	}
	public ArrayList<Integer> method4() {
		int data = 100, data2= 200;
		ArrayList<Integer> datas = new ArrayList<>();
		datas.add(data);
		datas.add(data2);
		return datas;
	}
	public int method5(int data1, int data2) {
		System.out.println("전달받은 매개변수 : " + data1 + ", "+data2);
		return data1+data2; 
	}
	public int method6(ArrayList<Integer> datas) {
		int data1 = datas.get(0);
		int data2 = datas.get(1);
		return data1+data2; 
	}
}
// 매개변수 = parameter = argument

예시 2

public class DataAccess {
	private String url; // 멤버변수, 멤버 필드 라고 부른다.
	
	/*
	 *  기본 생성자(default constructor) - 매개변수가 비어있을때
	*	: 명시 하지 않으면 자동으로 생섬됨.
	*	: 다른 생성자를 명시하면 기본생성자는 자동으로 생성되지 않음
	*/
	
	// 생성자는 void, int, String 등이 들어가지 않는다!
	public DataAccess() {
		String id = "oracle";
		String password = "1234";
		url = "www.data.com";
		System.out.println("연결 정보 : " + id + ", " + password + ", " + url);
	}

	// 생성자
	public DataAccess(String id) {
		String password = "1234";
		url = "www.data.com";
		System.out.println("연결 정보 : " + id + ", " + password + ", " + url);
	}

	// 생성자
	public DataAccess(String id, String password) {
		url = "www.data.com";
		System.out.println("연결 정보 : " + id + ", " + password + ", " + url);
	}

	// 생성자
	public DataAccess(String id, String password, String url) {
		this.url = url;
		System.out.println("연결 정보 : " + id + ", " + password + ", " + this.url);
	}
	
	public void insert() {
		System.out.println(this.url + "연결합니다");
		System.out.println("데이터를 저장합니다.");
	}
	public void select() {
		System.out.println(url + "연결합니다");
		System.out.println("데이터를 조회합니다.");
	}
	public void update() {
		System.out.println(url + "연결합니다");
		System.out.println("데이터를 수정합니다.");
	}
	public void delete() {
		System.out.println(url + "연결합니다");
		System.out.println("데이터를 삭제합니다.");
	}
}

위에서 만든 메서드를 이용하는 예제

import java.util.ArrayList;

class SubClass1 {
	public void method1() {
		System.out.println("SubClass 멤버로 구성된 method1");
	}
	public static void method2() { // static 이 붙으면 메서드를 불러오는 방법이 다르다
		// static 을 사용하면 해당 기능은 선언을 하지 않아도 항상 사용가능하고 프로그램의 시작과 동시에 시작되며 끝날때 같이 끝난다.
		System.out.println("SubClass1 멤버로 구성된 method2");
	}
}
	
public class MainClass01 {
	public static void main(String[] args) {
		DataAccess da = new DataAccess();
		SubClass02 sub1 = new SubClass02();
		sub1.method1();
		sub1.method2(); 
		// method2 는 static 메서드로 작성되었기 때문에 SubClass1 변수 생성하고 변수 안에서 method2를 불러오는것보다 직접 불러오는걸 권장한다.
		SubClass02.method2(); // 변수 생성하지 않고 바로 메서드를 불러오는 예시
		
		SubClass02 sub2 = new SubClass02();
		sub2.method1();
		SubClass02.method2();
		int data = sub2.method3();
		System.out.println("method3 반환데이터 : " + data);
		
		ArrayList<Integer> datas = sub2.method4();
		System.out.println("method4 반환데이터 : " + datas.get(0));
		System.out.println("method4 반환데이터 : " + datas.get(1));
		
		int result = sub2.method5(22, 33);
		System.out.println("합계 : " + result);
		
		result = sub1.method6(datas);
		System.out.println(result);
	}
}