Java

Java 기초(method)- AWS 풀스택 과정 46일차

awspspgh 2024. 9. 26. 18:14
목차
1. method
2. class
3. 느낀 점

 

1. method

▣ Method01

package day02;

public class Method01 {

	// 다른 메서드의 위치 공간
	public static void main(String[] args) {
		/* 메서드(Method) : function 기능(함수)
		 * 메서드 선언 및 구현
		 * 접근제한자(제어자) 리턴타입 메서드명(매개변수){
		 * 	기능구현;
		 * }
		 * - 접근제한자(제어자) : 접근할 수 있는 주체의 제한범위
		 * - 리턴타입 : 리턴할 값의 타입(타입으로만 기재)
		 * - 메서드명 : 소문자로 시작
		 * - 매개변수 : 기능을 수행하기 위해 필요로 하는 값(외부에서 들어와야 하는 값)
		 * - void : 리턴할 값이 없다는 것을 의미
		 * 
		 * - 메서드의 선언 위치
		 * - 클래스 안, 다른 메서드 밖
		 * - 메서드의 선언 순서는 상관없음.
		 * - 메서드는 순서대로 실행되는 것이 아니라 호출되어야 실행
		 * - 메서드의 호출은 다른 메서드에서도 가능. 다른 클래스의 메서드에서도 가능. (접근권한만 된다면...)
		 * 
		 * - 접근 권한
		 * - public : 누구나 사용 가능(모두 가능)
		 * - protected : 나 + 패키지 + 자식클래스(상속을 위해서 사용)
		 * - (default) : 나 + 패키지
		 * - private : 나
		 * 
		 * - private < default < protected < public
		 * 
		 */
		int result = sum(10, 20);
		System.out.println(result);
		
		// static이 없는 메서드는 객체 생성 후 호출
		// 내 클래스의 객체 생성 => 클래스 안의 모든 메서드 / 변수 사용가능.
		Method01 m = new Method01();
		m.sum2(10, 20);
		//System.out.println(result2);
	}

	// 리턴이 없는 타입
	public void sum2(int num1, int num2) {
		System.out.println(num1 + num2);
		//return num1 + num2;
	}
	
	// 다른 메서드의 위치 공간
	// 두 정수의 값을 매개변수로 주고, 두 수의 합을 리턴하는 메서드
	// 리턴 타입 : 합 => int (정수)
	// 메서드명 : sum
	// 매개변수 : 두 정수 => int num1, int num2
	public static int sum(int num1, int num2) {
		return num1 + num1;
	}
}

 

▷ 출력

출력 (1)

 

▣ Method02

package day02;

public class Method02 {

	public static void main(String[] args) {
		// 사칙연산 (+ - * / %) 각각의 메서드 생성
		// div, mod => 나누는 값이 0이면 Exception 발생
		// method에서 return은 메서드의 종료
		Method02 m = new Method02();
		System.out.println(m.sum(30,20));
		System.out.println(m.sub(30,20));
		System.out.println(m.mul(30,20));
		double result1 = m.div(30,20);
		if (result1 != -1) {
			System.out.println(m.div(30,20));
		}
		int result2 = m.mod(30,20);
		if (result2 != -1) {
			System.out.println(m.mod(30,20));		}
		
	}
	
	public int sum(int num1, int num2) {
		return num1 + num2;
	}
	
	public int sub(int num1, int num2) {
		return num1 - num2;
	}
	
	public int mul(int num1, int num2) {
		return num1 * num2;
	}
	
	public double div(double num1, int num2) {
		if(num2 == 0) {
			System.out.println("0으로 나눌 수 없습니다.");
			return -1;
		}
		return num1 / num2;			
	}
	
	public int mod(int num1, int num2) {
		if(num2 == 0) {
			System.out.println("0으로 나눌 수 없습니다.");
			return -1;
		}
		return num1 % num2;			
	}
	
}

 

▷ 출력

출력 (2)

 

▣ MethodEx01

package day02;

import java.util.Scanner;

public class MethodEx01 {

	public static void main(String[] args) {
		/* 계산기 만들기
		 * --menu--
		 * 1.덧셈 | 2.뺄셈 | 3.곱셈 | 4.나눗셈 | 5.나머지 | 6.종료
		 * > 메뉴 선택 1
		 * > 숫자 입력 1 5
		 * 결과 : 1 + 5 =6
		 * (더하기 메서드를 호출하여 연산결과를 출력)
		 * 4, 5번은 두 번째 숫자가 0이면 0으로 나눌 수 없습니다.
		 */
		
		Scanner scan = new Scanner(System.in);
		MethodEx01 m = new MethodEx01();
		
		int operator = 0;
		int value1 = 0;
		int value2 = 0;
		
		System.out.println("--menu--");
		System.out.println("1.덧셈 | 2.뺄셈 | 3.곱셈 | 4.나눗셈 | 5.나머지 | 6.종료");
		
		do {
			System.out.println("> 메뉴 선택");
			operator = scan.nextInt();
			
			if(operator == 6) {
				System.out.println("종료합니다.");
				break;
			}
			
			System.out.println("> 숫자 입력(ex:2 5)");
			value1 = scan.nextInt();
			value2 = scan.nextInt();

			switch(operator) {
			case 1:
				System.out.println("결과 : " + value1 + " ➕ " + value2 + " = " + m.sum(value1, value2));
				break;
			case 2:
				System.out.println("결과 : " + value1 + " ➖ " + value2 + " = " + m.sub(value1, value2));
				break;
			case 3:
				System.out.println("결과 : " + value1 + " ✖ " + value2 + " = " + m.mul(value1, value2));
				break;
			case 4: ;
				System.out.println(value2 == 0 ? "0을 나눌 수 없습니다." : "결과 : " + value1 + " ➗ " + value2 + " = " + m.div(value1, value2));
				break;
			case 5:
				System.out.println(value2 == 0 ? "0을 나눌 수 없습니다." : "결과 : " + value1 + " % " + value2 + " = " + m.mod(value1, value2));
				break;
			default:
				System.out.println("잘못 입력하셨습니다.");
				break;
			}
			
			
		} while(true);
		
		scan.close();
		
	}
	
	public int sum(int num1, int num2) {
		return num1 + num2;
	}
	
	public int sub(int num1, int num2) {
		return num1 - num2;
	}
	
	public int mul(int num1, int num2) {
		return num1 * num2;
	}
	
	public double div(double num1, int num2) {
		return num1 / num2;			
	}
	
	public int mod(int num1, int num2) {
		return num1 % num2;			
	}
	
}

 

▷ 출력

출력 (3)

 

▣ Method03

package day02;

import java.util.Scanner;

public class Method03 {

	public static void main(String[] args) {
		// 정수 하나를 주면
		// 해당 정수의 구구단을 출력하는 메서드 (리턴 없음.)
		
		Method03 m = new Method03();
		
		for(int i = 2; i <= 9; i ++) {
			m.mul(i);
			System.out.println();
		}
	
		

	}
	
	public void mul(int num) {
		int result = 0;
		
		for(int i = 1; i <= 9; i++) {
			result = num * i;
			System.out.print(num + " ✖ " + i + " = " + result + " ");
		}
	}

}

 

▷ 출력

출력 (4)

 

▣ Method04

package day02;

public class Method04 {

	public static void main(String[] args) {
		/* 메서드 오버로딩
		 * - 동일한 이름의 메서드를 여러 개 만드는 케이스
		 * - 오버로딩의 조건
		 * 1. 매개변수의 개수가 달라야 함.
		 * 2. 매개변수의 타입이 달라야 함.
		 * - 리턴타입은 상관없음. 매개변수의 이름도 상관없음.
		 */
		
		/* 가변인자 메서드
		 * - ... 배열처럼 받을 수 있는 메서드
		 * - 매개변수의 개수가 고정되지 않는 경우 사용
		 */
		
		Method04 m4 = new Method04();
		System.out.println(m4.sum(10, 20));
		System.out.println(m4.sum(10, 20, 30));
		System.out.println(m4.sum(1, 2, 3, 4, 5, 6, 7, 8, 9));
		
	}
	
	public int sum(int num1, int num2) {
		return num1 + num2;
	}
	
	public int sum(int num1, int num2, int num3) {
		return num1 + num2 + num3;
	}
	
	public int sum(int ...num) { // num을 배열처럼 처리가능
		int result = 0;
		for(int temp : num) {
			result += temp;
		}
		return result;
	}

}

 

▷ 출력

출력 (5)

 

▣ Lotto

package day02;

public class Lotto {
	
	public static void main(String[] args) {
		// 로또 번호 생성
		
		int lotto[] = new int[7]; // 당첨번호
		int user[] = new int[6]; // 사용자 로또 번호
		
		Lotto L = new Lotto();
		
		int cnt = 0;
		
		do {
			cnt++;
			L.resultArr(lotto, user);
			System.out.println("총 횟수 : " + cnt);
		}
		while(L.lottoArr(lotto, user) != 1);
		
	}
	/* 배열을 매개변수로 받아 1 ~ 45까지의 랜덤수를 채워서 생성(중복불가능 - 메서드 호출로 구현)
	 * 리턴할 필요가 없음. main에 있는 배열을 채우기.
	 */
	
	// 랜덤수 생성 메서드(중복 확인 메서드를 활용)
	public void randomArr(int arr[]) {
		int cnt = 0;
		while(cnt < arr.length) {
			int r = (int)(Math.random()*9) + 1;
			if(!containArr(arr, r)) {
				arr[cnt] = r;
				cnt++;
			}
		}
	}
	
	/* 배열과 값을 주고 같은지 아닌지 확인하는 메서드
	 * 배열에 값이 있으면 true / 없으면 false
	 */
	
	// 중복 확인 메서드
	public boolean containArr(int arr[], int random) {
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] == random) {
				return true;
			}
		}
		return false;
	}
	
	/* 배열(매개변수)의 값을 출력화는 메서드
	 * 1 2 3 4 5 6 [7] 당첨번호 출력방식
	 * 1 2 3 4 5 6 유저번호 출력방식
	 */
	
	// lotto, user 출력 메서드
	public void printArr(int arr[]) {
		for(int i = 0; i < 6; i++) {
			System.out.print(arr[i] + " ");
		}
		
		if (arr.length > 6) {
			int bonus = arr[arr.length - 1];
			System.out.print("[" + bonus + "]");
		}
	System.out.println();
	}
	
	/* 등수확인 메서드
	 * -- 당첨 기준
	 * 6개 일치 : 1등
	 * 5개 일치 + 보너스 번호 : 2등
	 * 5개 일치 : 3등
	 * 4개 일치 : 4등
	 * 4개 일치 : 5등
	 * 나머지는 꽝
	 */
	
	// 등수 확인 메서드(중복 확인 메서드를 활용)
	public int lottoArr(int arr1[], int arr2[]) {
		int cnt = 0;
		
		for (int i = 0; i < arr2.length; i++) {
			if(containArr(arr2, arr1[i])) {
				cnt++;
			}
		}
		
		switch(cnt) {
			case 6:
				return 1;
			case 5:
				if(containArr(arr2, arr1[arr1.length - 1])) {
					return 2;
				}else {
					return 3;
				}
			case 4:
				return 4;
			case 3:
				return 5;
			default:
				return 6;
		}
	}
	
	// 등수 출력 메서드
	public void resultArr(int arr1[], int arr2[]) {
		// 랜덤수 채우기
		randomArr(arr1);
		randomArr(arr2);
		
		// lotto, user 입력된 수 출력하기
		printArr(arr1);
		printArr(arr2);
		
		// 등수 출력하기
		String text = lottoArr(arr1, arr2) == 6 ? "꽝입니다." : lottoArr(arr1, arr2) + "등 입니다.";
		System.out.println(text);
	}
	
}

 

▷ 출력

출력 (6)

 

2. class

▣ Class01

package day02;

public class Class01 {
	// 멤버변수자리
	public static void main(String[] args) {
		/* 클래스 : 객체를 생성하기 위한 설명서
		 * 객체를 생성(new)해야 사용이 가능
		 * Lotto l = new Lotto(); // Lotto 클래스에서 객체를 생성 / 객체명 => l
		 * 
		 * 클래스는 객체를 생성하기 위한 설명서
		 * 객체 : 실제 사용되는 제품
		 * 메서드 : 기능
		 * 멤버변수 : 객체의 변수
		 * 
		 * 클래스 구성요소 : 멤버변수, 메서드
		 * 
		 * 프린터 클래스 생성
		 * - 멤버변수 : 크기, 색, 제조사, 제품명, 종류 ...
		 * - 메서드(기능) : 출력, 복사, 스캔, 팩스
		 * 
		 * 클래스 생성 방법
		 * class 클래스명{
		 * 		멤버변수; // 모든 메서드에서 사용 가능.
		 * 		메서드();
		 * 		메서드();
		 * 		메서드();
		 * }
		 * 
		 * - 객체 생성 방법
		 * 	클래스명 객체명 = new 클래스명();
		 * 	클래스명 객체명; // 선언만 null
		 * 	객체명 = new 클래스명(); // 선언된 객체에 생성
		 * 
		 * - 메서드 사용법
		 * 	같은 클래스 안에서 메서드를 호출할 경우 => 메서드명();
		 * 	다른 클래스에서 메서드를 호출할 경우 => 객체명, 메서드명();
		 * 	단, static은 같은 클래스이던 아니던 무조건 메서드명();
		 * 
		 * - 클래스에 public을 붙일 수 있는 건 파일명과 클래스명이 같을 경우만 가능
		 * - .java 파일 하나에 하나의 클래스만 있는건 아님. (여러 개 가능)
		 * - 멤버변수와 메서드는 public 상관없음.
		 * - 일반적으로 각 클래스의 멤버변수는 privated이 원칙 / method는 public이 일반적
		 * - private은 내 클래스에서만 사용 가능 (다른 클래스에서는 접근 불가능)
		 * - private으로 선언된 멤버변수에 접근하기 위해서는 getter / setter가 필요
		 * 
		 * - 접근제한자
		 * private : 나 (내 클래스)
		 * (default) : 나 + 패키지
		 * protected : 나 + 패키지 + 상속받는 자식클래스
		 * public : 모두
		 */
		Test1 t = new Test1();
		t.print();
		t.a = 3;
		t.b = 1;
		t.print();
		t.setA(3);
		t.setB(5);
		t.print();
	}

}

class Test1{
	// 멤버변수 위치
	// 멤버변수는 초기값을 설정하지 않아도 자동 설정됨.
	// 숫자 = 0 / 문자 = null
	int a;
	int b;
	
	public void print() {
		System.out.println(a+"-"+b);
	}
	
	// getter / setter 메서드 생성
	// getter : 멤버변수의 값을 리턴하는 메서드
	public int getA(){
		return this.a; // this 멤버변수를 의미하는 키워드
	}
	
	// setter : 멤버변수에 값을 설정하는 메서드
	public void setA(int a) {
		this.a = a;
	}
	
	public int getB(){
		return this.b;
	}
	
	public void setB(int b) {
		this.b = b;
	}
	// java에서는 getter / setter를 자동으로 생성 가능.
		
}

 

▷ 출력

출력 (7)

 

▣ Class02

package day02;

public class Class02 {

	public static void main(String[] args) {
		Car C = new Car();
		C.setName("소나타");
		C.setColor("블랙");
		C.setColor("2024");
		C.print();
		
		System.out.println( C.speedUp());
		C.power();
		System.out.println( C.speedUp());
		System.out.println( C.speedDown());
		System.out.println( C.speedDown());
	}

}

// Car 클래스 생성
// 멤버변수 : name, color, year, power, speed => private 선언 (getter / setter 생성)
// 소나타(블랙/2024) => 출력 메서드
// power : 시동 상태 나타내는 메서드(true / false)
// speed : 속도 up / down 메서드

class Car{
	private String name;
	private String color;
	private String year;
	private boolean power;
	private int speed;
	
	public void print() {
		System.out.println(name + "(" + color + "/" + year + ")");
	}
	
	public void power() {
		if(this.power == false) {
			this.power = true;
			System.out.println("시동이 켜졌습니다.");
		}else if(this.power == true) {
			this.power = false;
			System.out.println("시동이 꺼졌습니다.");
		}
	}
	
	public int speedUp() {
		if(power == true) {
			speed += 10;
		}else {
			System.out.println("시동이 꺼져있습니다.");
		}
		return speed;
	}
	
	public int speedDown() {
		if(speed == 0) {
			System.out.println("더 내려갈 수 없습니다.");
		}else if(power == true){
			speed -= 10;
		}else {
			System.out.println("시동이 꺼져있습니다.");
		}
		return speed;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getYear() {
		return year;
	}

	public void setYear(String year) {
		this.year = year;
	}

	public boolean isPower() {
		return power;
	}

	public void setPower(boolean power) {
		this.power = power;
	}

	public int getSpeed() {
		return speed;
	}

	public void setSpeed(int speed) {
		this.speed = speed;
	}
}

 

▷ 출력

출력 (8)

 

3. 느낀 점

오랜만에 본 개념이라 그런지 getter와 setter의 개념과 차이점에 대해서 헷갈렸다. 오늘 내용을 중심으로 복습을 해야할 것 같다.