1. 리턴을 사용할 때
: 메소드 내에서 모든 작업이 끝나지 않을 때
사용하는 부분에 작업의 결과를 알려주어야 할 때
[주로] 특정성을 부여하지 않을 때 사용
2. 리턴을 사용하지 않을 때
: 메소드 내에서 모든 작업이 끝날때
사용하는 부분에 결과를 전달할 필요가 없을 때
[주로] 소스 코드 간결화의 목적으로 사용하고자 할 때 사용
3. 메소드의 목적
1) 재사용의 목적
특정성을 부여해서는 안된다.
2) 소스코드 간결화
4. length와 length()의 차이?
: length 배열의 길이, length() 문자열의 길이
** 배열은 생성될 때, 배열의 길이를 알 수 있는 length라는 상수가 자동으로 만들어지고
클래스에서 length를 구현하려면 String 클래스 안에 있는 length라는 메서드를 사용해야함 **
5. 오늘 실습 코드
1) MethodTest
package day16;
public class MethodTest {
//두 정수의 덧셈 메소드
int add(int num1, int num2){
return num1 + num2;
}
public static void main(String[] args) {
MethodTest m = new MethodTest();
int result = m.add(10, 20);
System.out.println(result);
}
}
2) MethodTask
package day16;
public class MethodTask {
//1~100까지 println()으로 출력해주는 메소드
void printTo100() {
for (int i = 0; i < 100; i++) {
System.out.println(i+1);
}
}
//1~10까지의 합을 구해주는 메소드
int sumFrom1To10() {
int total = 0;
for (int i = 0; i < 10; i++) {
total += i+1;
}
return total;
}
//1~n까지의 합을 println()으로 출력하는 메소드
void sumFrom1(int end) {
int total = 0;
if(end > 1) {
for (int i = 0; i < end; i++) {
total += i + 1;
}
System.out.println(total);
}else {
System.out.println("1보다 큰 수를 입력하세요.");
}
}
//두 정수의 나눗셈 후 몫과 나머지를 구해주는 메소드(1)
// int[] div(int num1, int num2) {
// int[] result = new int[2];
//// int value = 0;
//// int rest = 0;
//
// if(num2 != 0) {
// result [0] = num1 / num2;
// result[1] = num1 % num2;
//// value = num1 / num2;
//// rest = num1 % num2;
// }else {
// System.out.println("0으로 나눌 수 없습니다.");
// }
// return result;
// }
//두 정수의 나눗셈 후 몫과 나머지를 구해주는 메소드(2)
void div(int num1, int num2, int[] result) {
//외부에서 2개의 값과 한개의 주소값을 전달받는다.
//다른 지역에 있는 변수의 값을 수정하기 위해서는 그 변수의 주소값을 알아야
//접근할 수 있고, JAVA에서는 주소값을 전달하는 연산자가 없기 때문에
//배열을 통해서 주소값을 전달받을 수 있다
//따라서 return값이 2개 이상일 때에는 배열을 통해서 문제를 해결할 수 있다.
//주소값은 중복이 없으며 주소값을 전달받은 후 그 주소에 접근하여 값을 수정하면
//다른 지역에 있는 저장공간의 값을 수정할 수 있다.
if(num2 != 0) {
result[0] = num1 / num2;
result[1] = num1 % num2;
}else {
result[0] = -1;
result[1] = -1;
}
}
//홀수를 짝수로 짝수를 홀수로 바꿔주는 메소드
int change(int num) {
if(num > -1) {
num++;
}
return num;
}
public static void main(String[] args) {
MethodTask m = new MethodTask();
//홀수를 짝수로 짝수를 홀수로 바꿔주는 메소드
int result = m.change(0);
if(result < 0) {
System.out.println("음수는 입력할 수 없습니다.");
}else if(result % 2 == 0) {
System.out.println("짝수로 바뀌었습니다.");
}else {
System.out.println("홀수로 바뀌었습니다.");
}
//두 정수의 나눗셈 후 몫과 나머지를 구해주는 메소드(1)
// System.out.println(m.div(10, 3)[1]);
//두 정수의 나눗셈 후 몫과 나머지를 구해주는 메소드(2)
// int[] result = new int[2];
// m.div(10, 3, result);
//
// if(result[0] == -1 && result[1] == -1) {
// System.out.println("0으로 나눌 수 없습니다.");
// }else {
// System.out.println("몫 : " + result[0]);
// System.out.println("나머지 : " + result[1]);
// }
}
}
3) Address
** Call By Reference : 메서드 호출 시에 사용되는 매개변수가 값이 아닌 주소(Address)로 전달 **
** 메인메소드의 data의 주소를 전달받음, test 메소드에서 data의 값이 변경되면
전달받은 주소를 참조(Reference)하여 그 주소의 값을 변경한다
(즉, 메인 메서드의 data의 값이 변경된다) **
package day16;
public class Address {
void test(int[] data) {
data[0] = 10;
}
public static void main(String[] args) {
int[] data = {2};
Address a = new Address();
a.test(data);
System.out.println(data[0]);
}
}
** Call By Value : 메서드 호출 시에 사용되는 매개변수의 값(value)을 복사하여 전달 **
** test 메소드에 있는 data의 값은 메인메소드에 있는 data의 값에 영향을 끼치지 않는다 **
package day16;
public class Address {
void test(int data) {
data = 10;
}
public static void main(String[] args) {
int data = 2;
Address a = new Address();
a.test(2);
System.out.println(data);
}
}
4) MethodTask2
package day16;
public class MethodTask2 {
//소문자를 대문자로 바꿔주는 메소드
String changeToUpper(String str) {
String result = "";
for (int i = 0; i < str.length(); i++) {
//charAt 문자열에서 인자로 주어진 값에 해당하는 문자를 리턴
char c = str.charAt(i);
if(c >= 97 && c <= 122) {
//아스키코드에서 97 ~ 122는 소문자 a~z
//charAt을 통해 리턴한 값이 소문자(97~122)인지 확인
//소문자에서 대문자로 변경은
//대문자(A=65)와 소문자(a=97)의 차이를 이용
result += (char)(c - 32);
}else {
result += c;
}
}
return result;
}
//한글을 정수로 바꿔주는 메소드("일공이사" > 1024)
int changeToHangle(String str) {
String hangle = "공일이삼사오육칠팔구";
String temp = "";
int result = 0;
for (int i = 0; i < str.length(); i++) {
//indexOf 문자열 내에서 특정한 문자열의 index 값을 리턴
//charAt을 통해 str에 입력된 값 추출
//입력된 값과 hangle을 비교에서
//입력된 값이 hangle의 몇 번방에 있는지 찾기
//이 인덱스 값이 한글을 정수로 바꿔준 값 -> temp에 누적 저장
//""는 문자열로 저장하기 위해서 필요
temp += "" + hangle.indexOf(str.charAt(i));
}
result = Integer.parseInt(temp);
return result;
}
public static void main(String[] args) {
System.out.println(
new MethodTask2().changeToHangle("일공이사오육구공"));
// System.out.println(
// new MethodTask2().changeToUpper("fdniuSADF31fASMf13fe2#@!#@!$"));
}
}
'웹_프론트_백엔드 > 단과' 카테고리의 다른 글
[단과_JAVA] 2020.02.07 (0) | 2020.02.10 |
---|---|
[단과_JAVA] 2020.02.06 (0) | 2020.02.06 |
[단과_Python] 2020.02.04 (0) | 2020.02.05 |
[단과_JAVA] 2020.02.04 (0) | 2020.02.05 |
[단과_Python] 2020.02.03 (0) | 2020.02.04 |