Method

소정·2023년 1월 25일
0

Java

목록 보기
10/23
post-custom-banner

메소드란?

객체가 가진 기능
메소드의 존재 이유는 코드를 보다 간결하고 객체의 멤버는 객체 스스로 제어하도록 하기 위함
가독성에 용이하고 코드가 간결해 진다

객체 = 변수 + 메소드를 가진 녀석을 지칭함


메소드 만드는 방법

리턴타입 이름(파라미터) { 영역
기능
}


사용예제

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		//학생 성적관리 프로그램
		//이름,국어,영어,평균
		String name;
		int kor;
		int eng;
		double avg;
		
		name="same";
		kor=80;
		eng=75;
		avg = (double)(kor+eng)/2;
		
		
		//만약 이런 학생이 다수면
		//위 변수 4개를 매번 만드는 작업이 번거로움
		//여러개의 데이터를 관리하는 배열객체 이용
		String[] arrName = new String[10];
		int[] arrKor = new int[10];
		int[] arrEng = new int[10];
		double[] arrAvg = new double[10];
		
		arrName[0] = "sam";
		arrKor[0] = 80;
		arrEng[0] = 70;
		arrAvg[0] = (double)(arrKor[0]+arrEng[0])/2;
		
		//위처럼 자료형별로 배열객체로 묶어서 사용하는 것도 가독성 떨어짐
		//학생 하나의 데이터가 서로 다른 배열객체에 나누어져 있어서
		
		//그래서 서로 연관있는 데이터끼리(이름, 영어,국어,평균) 묶어서
		//관리하는 것이 효과적
		
		//연관있는 데이터 끼리의 믂음을 설계하는 class 정의
		//별도의 .java문서에 새로운 클래스를 설계 해보기
		
		
		//새로 설계한 Student 클래스로 객체를 생성
		Student std =new Student();
		std.name = "sam";
		std.kor = 80;
		std.eng=70;
		std.avg = (double)(std.kor+std.eng)/2;
		
		Student std2 =new Student();
		std2.name = "robin";
		std2.kor = 88;
		std2.eng=67;
		std2.avg = (double)(std2.kor+std2.eng)/2;
		
		//화면 출력
		System.out.println( std ); //참조변수를 출력하면 자동 .toString() 발동 [클래스면@해시코드]
		System.out.println("name : "+ std.name);
		System.out.println("kor : "+ std.kor);
		System.out.println("eng : "+ std.eng);
		System.out.println("avg : "+ std.avg);
		
		System.out.println();
		
		System.out.println("name2 : "+ std2.name);
		System.out.println("kor2 : "+ std2.kor);
		System.out.println("eng2 : "+ std2.eng);
		System.out.println("avg2 : "+ std2.avg);
		
		System.out.println();
		
		
		//객체 멤버갮 변경
		int k = 94;
		std2.kor = k;
		std2.avg = (double)(std2.kor+std2.eng)/2;
		
		System.out.println("변경된 국어 성적 : "+ std2.kor);
		System.out.println("변경된 평균값 : "+ std2.avg);
		
		//이런식으로 출력 귀찮음
		//그래서 객체라는 녀석이 스스로 멤버값을 출력하는 기능이 있다면
		//편하게 그 기능 사용
		//stu3.출력(); //이러한 기능
		
		//객체가 기능을 가질 수 있도록 클래스 안에 기능(함수) 설계
		//메소드 호출
		//std3.output();
		
		System.out.println();
		
		//이런식으로 객체 안에 기능을 만들면 편하게 코딩가능
		Student std4 =new Student();
		std4.name = "kim";
		std4.kor = 97;
		std4.eng = 91;
		//평균 계산하는 것도 매번 작성 귀찮 평균계산 기능 만들기
		std4.calAverage();
		
		std4.output();
		
		//이런식으로 특정한 기능들을 미리 class에 설계해 놓으면
		//훨씬 코드가 간결해 지기 시작한다
		
		Student std5 = new Student();
		std5.name = "lim";
		std5.kor = 77;
		std5.eng = 68;
		std5.calAverage();
		std5.output();
		
		Student std6 = new Student();
		std6.input("choi", 97, 100);
		std6.calAverage();
		std6.output();
		
	}

}



public class Student {
	
	//서로 연관있는 데이터들을 저장할 변수를 정의
	//Field(필드 : 멤버변수 - 속성)
	String name;
	int kor;
	int eng;
	double avg;
	
	//기능 설계
	//method
	//리턴타입 이름(파라미터){영역 }
	void output() {
		System.out.println("name : "+ name);
		System.out.println("kor : "+ kor);
		System.out.println("eng : "+ eng);
		System.out.println("avg : "+ avg);
		System.out.println();
	}
	
	void calAverage() {
		avg = (double)(kor+eng)/2;
	}
	
	//멤버변수 안에 값을 입력하는 메소드
	//메소드 파라미터(매게변수)로 값 전달 받음
	void input(String name, int kor, int eng) {
		//멤버변수와 매개변수는 서로 다른 변수
		//매게변수로 받은 데이터들을 멤버변수로 전달 해 줘야함
		//멤버변수 지칭하는 참조변수 this.
		this.name = name;
		this.kor = kor;
		this.eng = eng;
	}
	
}



메소드의 오버로딩(overloading)

같은 기능의 메소드가 같은 이름 다른 파라미터를 가지고 있는 것
리턴 값이 다른 건 상관없음을 기억하자
GUI 환경에서는 모든 데이터가 문자열 타입

//사칙연산 기능들 : 메소드
int sum(int x, int y) {
	return x+y;
}
	
int subtract(int x, int y) {
	return x-y;
}
	
int multiple(int x, int y) {
	return x*y;
}
	
int divide(int x, int y) {
	return x/y;
}
	
double sum(double x, double y) {
	return x+y;
}
	
double subtract(double x, double y) {
	return x-y;
}
	
double multiple(double x, double y) {
	return x*y;
}
	
double divide(double x, double y) {
	return x/y;
}
	
//숫자모양의 문자열 데이터의 산술결과 리턴
int sum(String x, String y) {
	//분자열을 정수로 변환해주는 기능 이용
	int a = Integer.parseInt(x);
	int b = Integer.parseInt(y);
	
	return a+b;
}

클래스 안에서 필요한 메소드를 미리 선언해 두면 관리하기에도 용이하고 보다 간결한 코드를 짤 수 있는 것 같다
클래스 별로 잘 묶어두는 것이 클린코드의 시작이라 느꼈다

profile
보조기억장치
post-custom-banner

0개의 댓글