본문 바로가기
들은 강의

[생활코딩 자바2] - 2. JAVA 메소드(리팩토링, 파라미터, return)

by hotdog7778 2023. 6. 6.

쉽게 배우는 자바2[생활코딩] - 공부 기록

해당 강의는 https://www.boostcourse.org/cs128 에서 무료로 수강 할 수 있다.


 

1. 수업소개

들어가기 전에

이번 시간부터는 정리정돈을 하기 위한 도구인 메소드에 대해서 알아봅니다.

학습 목표

클래스의 함수인 메소드에 대해서 알아봅니다.

핵심 단어

  • 메소드
  • 함수

강의 내용

객체지향 프로그래밍 (Object Oriented Programming)

 

메소드는 클래스와 관련된 작업을 하는 함수입니다.

 

 - 메소드

method는 다른 컴퓨터 언어에서 function, subroutine, procedural 라 불리며, 한국어로는 절차지향 프로그래밍(procedural programming)은 즉 자바에서는 메소드라 불리는 것을 이용해서 프로그램을 정리 정돈하는 기법 입니다.

메소드를 이용해서 작은 부품을 만들고 이걸 결합해서 더큰 프로그램을 만들어 가는 테크닉이 프로시저 프로그래밍 입니다. 한 예로 C언어 도 그렇다.

메소드만으로 프로그램을 만들기에 부족하다 느껴서. 서로 연관된 메소드와 변수들을 모아서 그룹핑하고 이름을 붙여서 정리정돈을 하려고 만든 수납상자가 class 입니다. 이러한 class를 중심으로 프로그램의 구조를 만들어가는 컴퓨터 프로그래밍 방법론을 객체지향 프로그래밍, 이런 방법론을 언어차원에서 제공하는 언어를 객체지향 언어라고 합니다.

 

객체지향을 알게되면

  1. 프로그램을 잘 정리정돈해서 만들 수 있게 되고,
  2. 인스턴스를 만들 수 있게 되고,

 

 

2. 이미 익숙한 메소드

들어가기 전에

메소드라는 단어가 낯설지도 모르지만 우리는 메소드를 이미 사용해 왔습니다.

예제를 통해 우리가 이전에 사용했던 메소드를 통해 메소드라는 것에 대해 알아봅니다.

학습 목표

메소드에 대해서 알아봅니다.

핵심 단어

  • 메소드
  • main 메소드

강의 내용

public class FirstMethod {

								//main 메소드
	public static void main(String[] args) {

			System.out.println("hello Method");
			
			//System.out.메소드(클래스.메소드)
			//System.out.println(클래스.메소드)
			System.out.println(Math.floor(1.1));		
	}
}

main 메소드는 특수한 메소드로, 우리가 클래스를 실행할 때

어떠한 명령을 더 내리지 않아도 main 메소드를 실행합니다.

 

 

3. 메소드의 기본 형식

들어가기 전에

이전 시간에는 이미 사용했던 적이 있는 메소드들에 대해서 알아보았습니다.

메소드는 왜 필요할까요? 메소드의 필요성에 대해서 알아봅니다.

학습 목표

메소드의 필요성에 대해서 알아봅니다.

핵심 단어

  • 메소드
  • 리팩토링

강의 내용

한줄 짜리 코드도 그 코드의 의미를 명확하게 하기위해서 메소드로 만드는것은 아주 좋은 습관이다.

public class WhyMethod {
	public static void printTwoTimesA() { // 메소드 선언
		System.out.println("-");
		System.out.println("A");
		System.out.println("A");
	}
	
	public static void main(String[] args) {
			printTwoTimesA(); // 메소드 사용
			printTwoTimesA();
			printTwoTimesA();
	}

}

 

 

 

4. 메소드의 입력

들어가기 전에

메소드로는 지난 시간에 했던 것보다 훨씬 더 많은 일들이 가능합니다.

메소드는 함수와 같기 때문에 인자를 주고, 그에 따라서 다른 결과를 만드는 기능도 넣을 수 있습니다.

이번 시간에는 메소드에 인자를 넣어서 기능을 확장하는 방법을 알아봅니다.

학습 목표

메소드에 파라미터를 넣어서 기능을 확장해 봅니다.

핵심 단어

  • 메소드
  • 파라미터

강의 내용

메소드 정의 및 사용에 인자를 넣어보자

public class WhyMethod {
	
	public static void main(String[] args) {  //  자바가 메인 메소드를 실행할때 입력값이 args 를 통해 들어온다는 의미

									//인자(argument)
			printTwoTimes("a", "-"); // 메소드 사용
			printTwoTimes("a", "$");
			printTwoTimes("b", "@");
	}
																				//매개변수(parameter)
	public static void printTwoTimes(String text, String delimiter) { // 메소드 선언
		System.out.println("-");
		System.out.println(delimiter);
		System.out.println(text);
	}
}

위에 예에서 “a” 나 “-” 는 인자, text, delimiter 는 매개변수

 

 

5. 메소드의 출력

들어가기 전에

인자로 아무 것도 받지 않는 메소드와, 값을 받는 메소드에 대해서 알아보았습니다.

수학에서 함수는 어떤 값을 넣으면 어떤 값을 내보내는 기능을 하고 있습니다.

메소드도 함수라면 메소드도 어떤 값을 내보낼 수 있을까요?

학습 목표

값을 반환하는 메소드에 대해서 알아봅니다.

핵심 단어

  • 메소드
  • return

강의 내용

public class OutputMethod {
	
	public static String a() {  //리턴값이 문자열 형 이기때문에 String
			//...
			return "a";
	}
	
	public static int one() { //리턴값이 정수 이기때문에 int
		return 1; // 메소드를 종료하는 역할도 한다.
	}
	
	public static void main(String[] args) { //void는 리턴값이 없다는 것
	
			System.out.println(a()); // a
			System.out.println(one()); // 1
	
	}
	
}

값을 반환하는 메소드

우리가 지난번에 만들었던 printTwoTimes 메소드는 파라미터를 이용해서

우리가 원하는 구분자와 문자열을 이용해서 호출할 때마다 콘솔에 다른 문자열을 출력합니다.

그런데, 같은 문자열은 콘솔이 아니라 파일에 출력하고 싶다면 어떻게 할까요?

파일에 같은 문자열을 출력할 수 있도록, 똑같이 문자열과 구분자 파라미터로 값을 전달받고,

문자열을 구성해서 파일에 쓰는 작업을 수행할 것입니다.

즉 콘솔에 출력하나 파일에 출력하나 같은 문자열을 구성하는 작업이지만

두 개의 메소드에서 똑같이 그 작업을 구현하게 될 것입니다.

그렇다면 두 메소드에서 사용하는 문자열을 구성하는 메소드를 만들어서 그것을 이용하게 한다면

콘솔에 출력하거나 파일에 출력하거나 문자열 구성은 한번만 실행하지 않을까요?

그렇게 하기 위해서는 메소드가 문자열 객체를 반환하도록 만들어야 합니다.

import java.io.FileWriter;
import java.io.IOException;

public class WhyMethod {

	public static void main(String[] args) throws IOException {
		String out = twoTimes("a", "-");
		System.out.println(out);
		FileWriter fw = new FileWriter("out.txt");
		fw.write(out);
		fw.close();
		System.out.println(twoTimes("a", "*"));
	}
	public static String twoTimes(String text, String delimiter) {
		String out = "";
		out = out + delimiter + "\\n";
		out = out + text + "\\n";
		out = out + text + "\\n";
		return out;
	}
}

6. 메소드의 활용

들어가기 전에

메소드를 구성하는 방법에 대해서 지금까지 배워 보았습니다.

이번 시간에는 메소드를 활용해서 좀 더 실질적인 문제를 풀어 봅니다.

학습 목표

메소드를 활용해서 부가가치세와 총합을 구해서 출력하는 프로그램을 만들어 봅니다.

핵심 단어

  • 메소드

강의 내용

메소드를 써서 재사용성이 훨씬 높은 코드로 진화하기

public class AccountingApp {

	public static void main(String[] args) {
		double valueOfSupply = 10000.0;
		double vatRate = 0.1;
		double vat = valueOfSupply * vatRate;
		double total = valueOfSupply + vat;

		System.out.println("Value of supply : " + valueOfSupply);
		System.out.println("VAT : " + vat);
		System.out.println("Total : " + total);
	}

}
public class AccountingApp {

	// 지역변수 였던 공급가액 전역변수로 빼주기
	public static double valueOfSupply = 10000.0;
	public static double vatRate = 0.1;
	public static double getVAT() {return valueOfSupply * vatRate;}
	public static double getTotal() {return valueOfSupply + getVAT();}
	
	public static void main(String[] args) {
		// 부가세
		double vat = getVAT();
		// 합계
		double total = getTotal();
		
		System.out.println("Value of supply : " + valueOfSupply);
		System.out.println("VAT : " + vat);
		System.out.println("Total : " + total);
	}

}
	public static void main(String[] args) {

		// 부가세, 합계를 메서드를 바로 사용해서 출력하기		
		System.out.println("Value of supply : " + valueOfSupply);
		System.out.println( "VAT : " + getVAT() );
		System.out.println("Total : " + getTotal() );
	}

}

7. 수업을 마치며

들어가기 전에

이제 여러분도 메소드에 대해서 알게 되었습니다.

앞으로는 다른 사람이 만들어둔 메소드를 더 잘 사용할 수 있게 될 것이고

메소드를 만들어서 그것을 여러 번 이용할 수 있을 것입니다.

그럼 이제 무엇을 하면 좋을까요?

학습 목표

앞으로 더 배워볼 것들을 살펴봅시다.

핵심 단어

  • 클래스
  • OOP

 

 

8. 부록 (access level modifiers)

들어가기 전에

지금 배울 필요는 없지만 혹시 지금까지 배우면서 궁금한 부분이 있었다면

이번 강의를 들어 보세요. 여러분이 많이 써 왔지만 의미는 잘 몰랐던,

접근 제어에 대해서 알아봅니다.

학습 목표

접근 제어에 대해서 알아봅니다.

핵심 단어

  • 접근 제어
  • private, public, protected, default

강의 내용

private > 같은 클래스 안에서 사용

 

 

9. 부록 (static)

들어가기 전에

이번 시간에는 public과 함께 자주 썼지만 의미를 알수 없었던 static에 대해서 알아봅니다.

학습 목표

static 키워드에 대해서 알아봅니다.

핵심 단어

  • static 메소드

강의 내용

static - class method

no static - instance method