웹_프론트_백엔드/단과

[단과_JAVA] 2020.02.05

shine94 2020. 2. 6. 08:13

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