Java 정리 08
22 Nov 2018
Reading time ~5 minutes
Java 정리 08 - method, Javadoc, Overload, Variable Arguments, Escape Character
method의 4가지 형태
- 반환형 없고 매개변수 없는 형태 (고정적인 일)
- 반환형 없고 매개변수 있는 형태 (가변적인 일)
- 반환형 있고 매개변수 없는 형태 (고정값)
- 반환형 있고 매개변수 있는 형태 (가변값)
// 1. 반환형 없고 매개변수 없는 형태
public void 메소드명() {
} // '}'는 호출한 곳으로 돌아가라는 의미, return은 값을 내보내는 역할!
// 호출
메소드명();
// 2. 반환형 없고 매개변수 있는 형태
public void 메소드명(매개변수타입 매개변수명, ...) {
}
// 호출 - method 매개변수에 일치하는 값을 넣어 호출
메소드명(매개변수1, 매개변수2,..);
// 3. 반환형 있고 매개변수 없는 형태
public 반환형 메소드명() {
// 반환값은 반환형과 일치하는 데이터형이어야 한다.
return 반환값;
}
// 호출 - 값을 받는 코드, 값을 사용하는 코드에서 사용됨
어떤변수 = 메소드명();
// 4. 반환형 있고 매개변수 있는 형태
public 반환형 메소드명(매개변수타입 매개변수명, ...) {
return 반환값;
}
// 호출
어떤변수 = 메소드명(매개변수1, 매개변수2, ...);
/**
* method의 4가지 형태
* @author owner
*/
public class MethodType {
/**
* 반환형 없고 매개변수 없는 형 - 고정일
*/
public void typeA() {
System.out.println("안녕하세요?");
}
/**
* 반환형 없고 매개변수 있는 형 - 가변일
* @param i 출력하고 싶은 값
*/
public void typeB(int i) {
System.out.println(i+"번 안녕");
}
/**
* 반환형 있고, 매개변수 없는 형 - 고정값
* 값을 받아 사용하는 코드가 필요.
* @return 년.월을 실수형으로 반환
*/
public double typeC() {
return 2018.11;
// return 구문 아래에 코드가 정의될 수 없다
// System.out.println("hello"); // Unreachable code error!
}
/**
* 반환형 있고, 매개변수 있는 형 - 가변값
* @param d 정수로 만들고 싶은 실수 값
* @return 정수로 캐스팅된 값
*/
public int typeD(double d) {
return (int)d;
}
public static void main(String[] args) {
MethodType mt = new MethodType();
// 1. 고정일 method 호출
mt.typeA();
// 2. 가변일 method 호출
mt.typeB(5);
// 3. 고정값 method 호출
// - 반환형과 일치하는 변수를 만들어 값 저장
double i = mt.typeC();
System.out.println("고정값 : "+i);
// 4. 가변값 method 호출
// - 반환형과 일치하는 변수를 만들어 값 저장
int j = mt.typeD(2018.11);
System.out.println(j);
}
}
Javadoc 생성
- class 도움말
- source code 작성 시 Java Doc주석(Alt+Shift+J) 설정
- class 위, constant 위, method 위에 생성
-
javadoc을 만드는 util : javadoc.exe
- 설명서.html 로 생성됨
- 접근지정자가 private이면 doc에 포함되지 않음
/**
* Doc주석
*/
@author 제작자명
@param 매개변수 설명
@return 반환값 설명
//cmd
C:\...> javadoc -d . 소스파일명.java
이클립스에서 Javadoc 생성
- 프로젝트 선택 - Export - Javadoc 선택
다형성(Polymorphism)
- 같은 대상을 다르게 사용하는 것
- OOP언어의 3대 특징(상속, 다형성, 캡슐화) 중 하나
- method 다형성, 객체 다형성
method 다형성
-
같은 이름의 메소드를 다르게 사용하는 것
- 편의성 향상
- Overload, Override가 지원됨
-
Overload(Overloading)
- 하나의 클래스에서 같은 이름의 메소드를 여러개 작성하는 것
- 호출할 때 식별되도록 메소드 작성
- 접근 지정자 반환형 메소드명 같게 만들고 매개변수만 다르게 작성
- java.lang 패키지 System클래스 out필드 println 메소드가 대표적인 오버로딩 예시
/**
* 다형성 : method Overload
* 하나의 클래스에서 같은 이름의 method를 여러개 작성하는 것.
* 규칙) 접근지정자 반환형 method명은 같게 만들고 매개변수만 다르게 생성
*/
public class TestOverload {
/**
* ☆을 하나 출력하는 일
*/
public void printStar() {
System.out.println("☆");
}
/**
* 입력되는 값에 따라 ★을 여러개 출력하는 일
* @param count 출력할 ★의 개수
*/
public void printStar(int count) {
for(int i=0; i<count; i++) {
System.out.print("★");
}
System.out.println();
}
public static void main(String[] args) {
TestOverload to = new TestOverload();
to.printStar();
to.printStar(3);
}
}
Variable Arguments (가변인자, 가변인수형)
- prarmeter는 하나인데 여러개의 arguments를 넣어줄 수 있는 것
- jdk 1.5부터 추가된 기능
- method 안에서는 배열로 처리됨
- 여러개의 parameter 정의할 때에는 가장 마지막에만 정의 가능
// parameter를 정의할 때 데이터형... 파라미터명 형식을 사용
public void 메소드명(int ... param) {
for(int i=0; i<param.length; i++) {
// param[i] 같이 배열처럼 사용
}
}
public void method(int i, int j, char... c) {
// 가변인수형은 파라미터 가장 끝에만 정의할 수 있다.(중간에 들어가면 에러)
}
public class VariableArguments {
public void test(int... param) {
for(int val : param) {
System.out.print(val+" ");
}
System.out.println("test method called");
}
public static void main(String[] args) {
VariableArguments va = new VariableArguments();
va.test();
va.test(1);
va.test(1,2,3,4,5);
}
}
public class VariableArguments02 {
// 가변 인수를 받기위한 매개변수는 가장 마지막에만 사용할 수 있다.
public void test2(int i, double d, int... j) {
System.out.println("처음 매개변수 : i = "+i);
System.out.println("두번째 매개변수 : d = "+d);
// 가변인자는 배열(참조변수)로 생성되기 때문에 주소값이 찍힘
System.out.println("세번째 매개변수 : j = "+j);
for (int idx=0; idx<j.length; idx++) {
System.out.println(j[idx]);
}
}
public static void main(String[] args) {
VariableArguments02 va2 = new VariableArguments02();
va2.test2(1, 3, 10,20,30,40,50);
}
}
Variable Arguments를 이용한 출력 method
- Variable Arguments를 사용하기 때문에 jdk 1.5이상에서 사용가능
- 출력문자를 사용하여 값을 대입함
-
출력메시지와 출력값을 분리할 수 있다.
- 출력 후 줄변경이 안됨
- 출력크기(자리수)를 설정할 수 있다.
System.out.printf("출력메시지 출력문자", 값, ...);
System.out.format("출력메시지 출력문자", 값, ...);
// 정수자릿수
%자릿수문자
// 전체자리수 5, 양수면 오른쪽 정렬
System.out.printf("[%5d]",123);
[ 123]
// 전체자리수 5, 음수면 왼쪽 정렬
System.out.printf("[%-5d]", 123);
[123 ]
// 실수자릿수
"%전체자릿수.실수자릿수f"
System.out.printf("[%.2f]", 12.1234);
[12.12]
// 전체자리수 10, 소수점 2자리까지(반올림), 양수면 오른쪽 정렬
System.out.printf("[%10.2f]", 12.1234);
[ 12.12]
public class UsePrintf {
public static void main(String[] args) {
System.out.printf("정수 [%d][%5d][%-5d]\n",11,22,38);
System.out.printf("문자 [%c][%5c][%-5c]\n",'A','B','C');
System.out.printf("문자열[%s][%10s][%-10s]\n","자바","자바","잠와");
System.out.printf("실수 [%.2f][%5.2f][%-5.2f]\n",1.437,2.567,3.141592);
System.out.printf("오늘은 %d년 %d월 %d일 %c요일, 온도는 %.1f도입니다.\n"
, 2018, 11, 22, '목', 1.5);
}
}
Escape Character (특수 문자)
- 문자열 안에 정의하는 기능을 가진 문자
- ’\‘로 시작
public class EscapeCharacter {
public static void main(String[] args) {
// \t : tab
System.out.println("이\t재호");
System.out.println("이\t\t재호");
// \n : new line
System.out.println("정\n택");
// \r : carriage return 원래 커서만 앞으로 이동
// 자바에선 \n와 동일하게 줄이 바뀜
// \r\n : 윈도우 줄바꿈
System.out.println("영\r근");
// \" : print "
System.out.println("오늘은 \"급여일\" 입니다.");
// \' : print '
System.out.println("오늘은 \'급여일\' 입니다.");
// \\ : print \
System.out.println("c:\\users\\owner\\...");
}
}