• Home
  • About
    • Young's Github Pages photo

      一日不作一日不食

    • About
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Java 정리 08

22 Nov 2018

Reading time ~5 minutes

Java 정리 08 - method, Javadoc, Overload, Variable Arguments, Escape Character


method의 4가지 형태

  1. 반환형 없고 매개변수 없는 형태 (고정적인 일)
  2. 반환형 없고 매개변수 있는 형태 (가변적인 일)
  3. 반환형 있고 매개변수 없는 형태 (고정값)
  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

01

02

03


이클립스에서 Javadoc 생성

  • 프로젝트 선택 - Export - Javadoc 선택

04

05

06

07

08


다형성(Polymorphism)

  • 같은 대상을 다르게 사용하는 것
  • OOP언어의 3대 특징(상속, 다형성, 캡슐화) 중 하나
  • method 다형성, 객체 다형성

method 다형성

  • 같은 이름의 메소드를 다르게 사용하는 것
    • 편의성 향상
  • Overload, Override가 지원됨
  • Overload(Overloading)
    • 하나의 클래스에서 같은 이름의 메소드를 여러개 작성하는 것
    • 호출할 때 식별되도록 메소드 작성
      • 접근 지정자 반환형 메소드명 같게 만들고 매개변수만 다르게 작성
    • java.lang 패키지 System클래스 out필드 println 메소드가 대표적인 오버로딩 예시

09

/**
* 다형성 : 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);
    }
}

10


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);
     }
}

11

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);
     }
}

12


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]

14

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);
     }
}

15


Escape Character (특수 문자)

  • 문자열 안에 정의하는 기능을 가진 문자
    • ’\‘로 시작

13

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\\...");
     }
}

숙제풀이



Java