목차 | |
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;
}
}
▷ 출력
▣ 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;
}
}
▷ 출력
▣ 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;
}
}
▷ 출력
▣ 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 + " ");
}
}
}
▷ 출력
▣ 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;
}
}
▷ 출력
▣ 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);
}
}
▷ 출력
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를 자동으로 생성 가능.
}
▷ 출력
▣ 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;
}
}
▷ 출력
3. 느낀 점
오랜만에 본 개념이라 그런지 getter와 setter의 개념과 차이점에 대해서 헷갈렸다. 오늘 내용을 중심으로 복습을 해야할 것 같다.
'Java' 카테고리의 다른 글
Java 기초(extends, abstract)- AWS 풀스택 과정 48일차 (2) | 2024.09.30 |
---|---|
Java 기초(class)- AWS 풀스택 과정 47일차 (1) | 2024.09.27 |
Java 설정 및 기초- AWS 풀스택 과정 45일차 (4) | 2024.09.25 |
Java 기초(static) - AWS 풀스택 과정 8일차 (0) | 2024.07.24 |
Java 기초(Class) - AWS 풀스택 과정 7일차 (0) | 2024.07.23 |