JAVA 웹개발 과정 국비 9일차 정리

9일차

※ 배우는 과정이므로 정확하지 않을 수 있습니다.
잘못된 점은 알려주시면 수정하도록 하겠습니다!


1. Method

  • 코드를 기능단위로 최대한 분할해서 만들어라!
  • main 밖에 만드는 코드.
  • Standard Method : 자바 라이브러리 내에서 제공되는 도구들
  • Custom Method : 우리가 직접 만드는 도구들

1) 만드는 방법 (문법)

우리는 지금까지 main에 모든 기능을 넣었지만, 원래 main은 아주 작은 부분이다.
main 밖의 코드가 훨씬 많이 존재한다.

public class Exam_01 {
	public static void main(String[] args) {
		System.out.println(10+5);
	}
}

위의 코드는 동작하는데 전혀 문제가 없지만, 아쉬운 코드이다.
왜냐하면 출력을 하는 기능과 덧셈을 하는 기능이 같이 있기 때문이다.

2) 어떻게 하면 좋은 코드가 되는 것인가?

쉽게 이해하기 위해 예를 들어 정리한다.

Exam_01은 Start up 기업이고, main은 기업의 사장님이다.
그리고 Exam_01은 1인기업이기 때문에, main 사장님 혼자 출력과 덧셈 두가지 일을 모두 해왔다.
시간이 지나서 매출이 생기고, 일이 점점 늘어나서 덧셈을 담당하는 직원을 뽑기로 결정했다.

① 덧셈 일을 하는 직원 plus를 고용했다.

plus가 바로 메소드이다.

② 사장님이 plus를 부른다.

‘메소드를 콜한다’ 라고 한다.

③ plus에게 10이랑 5 가져가서 덧셈해오세요 라고 시킨다.

10이랑 5를 인수 = 인자 = parameter = argument 라고 하며 이 값들이 메소드를 부르면서 처리를 위해 전달하는 값이다.
parameter와 argument는 엄밀히 말하면 다르지만 딱히 구분하지 않고 쓰인다.

④ 본래 plus 자리로 돌아가서 처리한다.

메소드의 범위 { } (중괄호) 를 나타낸다.
{ } 안에 메소드가 해야하는 일을 넣는다.

⑤ plus 본체가 값을 2개 받아야 일을 처리할 수 있다.

이 값을 매개변수(=parameter)라 한다.

⑥ plus 직원이 일을 다하면 사장님께 보고를 한다.

이 과정에서 return을 쓴다.
return은 메소드를 종료하고, 값을 caller(main)에게 전달하는 기능을 한다.

public class Exam_01 {

	pulic static int plus(int num1, int num2) { 
		int result = num1 + num2;
		return result;
	}
	public static void main(String[] args) {
		System.out.println(plus(10, 5)); 
	}
}

과정을 모두 완료하면 위와 같이 덧셈 기능이 있는 plus 메소드가 따로 만들어지면서, 기능이 구분되는 것을 볼 수 있다.

용어를 정리하자면 아래와 같다.

용어 설명 코드 예시
Method 기능 단위로 구분한 코드 plus
parameter(매개변수) 메소드 정의부에 있는 변수 (num1, num2)
매개변수부 매개변수가 있는 부분 (int num1, int num2)
인자(argument) 메소드 호출부에 있는, 실제 전달되는 값 (10, 5)
Method 정의부 메소드를 정의하는 부분 public static int plus(int num1, int num2)
Method 호출부 메소드를 호출하는 부분 plus(10, 5);
Return DataType DataType을 반환하는 부분 int
void 리턴 값이 없을 때 사용하는 DataType -

3) plus 메소드에서 출력까지 하면 더 깔끔하지 않을까?

답은 No 이다.
범용성 있는 메소드를 만드는 것이 목적이기 때문에, 예를 들면 콘솔을 사용하지 않는 프로그램에는 출력기능이 불필요하게 들어있어 이 코드를 사용하기 어렵다.
따라서 이름에 걸맞는 최소한의 기능을 가지게 만들어야한다.

4) 주의할 return 값

예제 문제를 풀 때, 좋은 질문이 나왔어서 정리한다.
두 파라미터 중 큰 값을 리턴하는 bigger 이라는 메소드를 만드는 예제였는데, 아래 코드 중 한가지는 오류가 있어 실행되지 않는다.

public static int bigger(int num1, int num2) {  // 1번 코드
	if(num1>num2) {
		return num1;
	}else if(num2>num1) {
		return num2;
	}else {
		return 0;
	}
}

public static int bigger(int num1, int num2) {  // 2번 코드
	if(num1>num2) {
		return num1;
	}else if(num2>num1) {
		return num2;
	}else if(num1==num2) {
		return 0;
	}
}

오류가 나는 코드는 2번 코드이다.
사람은 똑똑해서 두가지 경우 모두 동일하게 인식하지만, 컴퓨터는 오직 문법과 조건으로만 판단하기 때문에 아래 코드는 세가지 경우 말고 else의 경우 return 값이 없기 때문에 문법적으로 맞지 않다고 판단하는 것이다.

2. 여러가지 Method

String str = "Hello";

1) str.length() : int

문자열의 길이를 int 값으로 반환하는 메소드.

2) str.charAt(int index) : char

문자열에서 특정 index 값을 char형으로 반환하는 메소드.

3) str.toCharArray() : char[ ]

문자열을 char형 배열로 만들어서 반환하는 메소드.

4) str.startsWith(String prefix(접두사)) : boolean

문자열 접두사가 파라미터로 시작하는지 boolean으로 반환하는 메소드.

5) str.endsWith(String suffix(접미사)) : boolean

문자열 접미사가 파라미터로 끝나는지 boolean으로 반환하는 메소드.

6) str.contains(CharSequence s(String이랑 비슷한 개념(나중에 배운다))) : boolean

문자열이 파라미터를 포함하고 있는지 boolean으로 반환하는 메소드.

7) str.split(String regex(js할때 배움)) : String[ ]

파라미터를 기준점으로 문자열을 나눠서 String형 배열로 반환하는 메소드.

  • 기준 파라미터는 나누고 사라진다.
    “boo:and:foo”.split(:) => [“boo”, “and”, “foo”]
  • 후행 빈 문자열은 포함되지 않는다.
    “boo:and:foo”.split(“o”) => [“b”, “”, “:and:f”]

8) str.replace(CharSequence target, CharSequence replacement) : String

변환대상 문자열, 변환할 문자열을 차례로 넣어주면 변환해서 반환하는 메소드.

9) str.replaceAll(String regex, String replacement) : String

replace메소드와 동일한 기능을 갖고 있으나, 정규표현식을 이용하여 변환할 수 있다고 한다.
아직 배우지 않았으므로 알고만 넘어가자.

10) str.substring(int beginIndex) : String

시작 index부터 끝까지 추출하여 반환하는 메소드.

11) str.substring(int beginIndex, int endIndex) : String

시작index부터 끝index 전까지 추출하여 반환하는 메소드.

12) 꿀팁!

boolean 값으로 리턴하는 메소드들은 물어보는 모습이 많다.
물음표를 붙여서 의문문으로 읽으면 도움이 된다.

8, 9, 10은 수업에서 다루진 않았지만 시간날때 찾아보라고 해서 정리했다.

13) main에서는 왜 메소드를 정의하지 못할까?

메소드 안에서 다른 메소드를 만들 수 없다.
이것은 자바의 규칙이다.
main은 메소드이다.
그리고 main 메소드는 특별한 메소드이기 때문에 1번 호출되고 끝난다.
근데 왜 매개변수를 가지고 있을까?
이것은 나중에 배운다… 투비컨티뉴…

3. length와 length()

용법 차이점 의미
.length() 메소드 문자열 길이를 리턴
length 변수 배열 길이를 리턴

두 개가 너무 헷갈려서 질문했는데, 용법이라 그냥 외우라하셨다.
차이점이라고 하면 length메소드와 변수 length 라는 것?
둘다 외우면 헷갈리니 문자열 길이 리턴 length 메소드를 외워두자.

댓글남기기