[JAVA] METHOD & API

μ„±μž₯일기·2024λ…„ 7μ›” 12일
0

[SWCAMP] JAVA

λͺ©λ‘ 보기
4/16

λ©”μ†Œλ“œ

πŸ’‘ λ©”μ†Œλ“œ(method)λŠ” μ–΄λ–€ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ…λ Ήλ¬Έμ˜ 집합이라고 ν•  수 μžˆλ‹€.
μžμ„Έν•œ λ©”μ†Œλ“œ μ‚¬μš©λ²•μ€ 객체 λΆ€λΆ„μ—μ„œ λ‹€λ£¨κ²Œ λ˜λ‹ˆ μ§€κΈˆμ€ 호좜 흐름에 λŒ€ν•΄ 이해할 수 μžˆλ„λ‘ ν•˜μž.

λ©”μ†Œλ“œμ˜ μ‚¬μš© λͺ©μ 

  • μ€‘λ³΅λ˜λŠ” μ½”λ“œλ₯Ό λ©”μ†Œλ“œλ‘œ λ§Œλ“€μ–΄ μ½”λ“œμ˜ 반볡 μ‚¬μš©μ„ ν”Όν•  수 μžˆλ‹€.
  • μ½”λ“œμ˜ 가독성이 μ’‹μ•„μ§„λ‹€.
  • κΈ°λŠ₯의 변경이 ν•„μš”ν•œ 경우 λ©”μ†Œλ“œ λΆ€λΆ„λ§Œ μˆ˜μ •ν•˜λ©΄ 되기 λ•Œλ¬Έμ—, μ†μ‰¬μš΄ μœ μ§€λ³΄μˆ˜κ°€ κ°€λŠ₯ν•˜λ‹€.

λ©”μ†Œλ“œ μ„ μ–Έ

μ ‘κ·Όμ œμ–΄μž λ°˜ν™˜νƒ€μž… λ©”μ†Œλ“œμ΄λ¦„ (λ§€κ°œλ³€μˆ˜ λͺ©λ‘) {

		// μ‹€ν–‰ν•  μ½”λ“œ

		// λ°˜ν™˜νƒ€μž…μ΄ μžˆμ„κ²½μš° λ°˜ν™˜νƒ€μž…μ— 맞게 return μž‘μ„±
		// λ°˜ν™˜νƒ€μž…μ΄ void인 경우 μƒλž΅
		return ...;
}
  • μ ‘κ·Ό μ œμ–΄μž : λ©”μ†Œλ“œμ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„
    • public : μ–΄λ””μ„œλ‚˜ μ ‘κ·Ό κ°€λŠ₯
    • protected : μƒμ†κ΄€κ³„μ΄κ±°λ‚˜ 같은 νŒ¨ν‚€μ§€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯
    • default(μƒλž΅κ°€λŠ₯) : 같은 νŒ¨ν‚€μ§€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯
    • private : 같은 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯
  • λ°˜ν™˜ νƒ€μž…(return type) : λ©”μ†Œλ“œκ°€ λͺ¨λ“  μž‘μ—…μ„ 마치고 λ°˜ν™˜ν•˜λŠ” λ°μ΄ν„°μ˜ νƒ€μž…
    • void : 리턴값 μ—†μŒ
    • κΈ°λ³Έ λ³€μˆ˜ μžλ£Œν˜• : int, float, λ“±λ“±
    • μ˜€λΈŒμ νŠΈν˜• : String, 이외 μ‚¬μš©μž μ •μ˜νƒ€μž…
  • λ©”μ†Œλ“œ 이름 : λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•œ 이름
  • λ§€κ°œλ³€μˆ˜ λͺ©λ‘(parameters) : λ©”μ†Œλ“œ 호좜 μ‹œμ— μ „λ‹¬λ˜λŠ” 인수의 값을 μ €μž₯ν•  λ³€μˆ˜λ“€
  • μ‹€ν–‰ν•  μ½”λ“œ : λ©”μ†Œλ“œμ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œ

λ©”μ†Œλ“œ 호좜

  • 미리 μ •μ˜ν•œ λ©”μ†Œλ“œλŠ” μ°Έμ‘°μ—°μ‚°μž(.)λ₯Ό 톡해 ν˜ΈμΆœν•  수 μžˆλ‹€.

public class Application {

   public static void main(String[] args) {

      Application app = new Application();

			//λ ˆνΌλŸ°μŠ€λ³€μˆ˜μ΄λ¦„.λ©”μ†Œλ“œμ΄λ¦„();			
      app.methodA();
			//λ ˆνΌλŸ°μŠ€λ³€μˆ˜μ΄λ¦„.λ©”μ†Œλ“œμ΄λ¦„(λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2, ...)
      app.methodB(10);
   }

   public void methodA(){
      System.out.println("method A 호좜됨....");
   }

   public void methodB(int x) {
      System.out.println("method B 둜 " + x + " κ°’ λ„˜μ–΄μ˜΄...");
   }

}
  • μ‹€ν–‰κ²°κ³Ό
    method A 호좜됨....
    method B 둜 10 κ°’ λ„˜μ–΄μ˜΄...

λ©”μ†Œλ“œ 호좜 흐름

  • μ•„λž˜μ™€ 같은 μ½”λ“œκ°€ μžˆμ„ λ•Œ, μ‹€ν–‰ κ²°κ³Όκ°€ μ–΄λ–€μ§€ μ˜ˆμƒν•΄λ³΄μž.
    public class Application {
    
       public static void main(String[] args) {
    
          System.out.println("main() μ‹œμž‘λ¨...");
    
          Application app = new Application();
          app.methodA();
    
          System.out.println("main() μ’…λ£Œλ¨...");
    
       }
    
       public void methodA() {
    
          System.out.println("methodA() ν˜ΈμΆœν•¨...");
    
          methodB();
    
          System.out.println("methodA() μ’…λ£Œλ¨...");
    
       }
    
       public void methodB() {
    
          System.out.println("methodB() ν˜ΈμΆœν•¨...");
    
          methodC();
    
          System.out.println("methodB() μ’…λ£Œλ¨...");
    
       }
    
       public void methodC() {
    
          System.out.println("methodC() ν˜ΈμΆœν•¨...");
          System.out.println("methodC() μ’…λ£Œλ¨...");
    
       }
    }
    • μ‹€ν–‰κ²°κ³Ό
      main() μ‹œμž‘λ¨...
      methodA() ν˜ΈμΆœν•¨...
      methodB() ν˜ΈμΆœν•¨...
      methodC() ν˜ΈμΆœν•¨...
      methodC() μ’…λ£Œλ¨...
      methodB() μ’…λ£Œλ¨...
      methodA() μ’…λ£Œλ¨...
      main() μ’…λ£Œλ¨...
  • μ•„λž˜ 그림은 ν•΄λ‹Ή μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ stack λ©”λͺ¨λ¦¬ μ˜μ—­μ—μ„œ μΌμ–΄λ‚˜λŠ” 일이닀. λ©”μ†Œλ“œκ°€ μ‹€ν–‰λ˜κΈ° μœ„ν•œ 곡간을 ν• λ‹Ήν•΄μ£ΌλŠ” 것이라고 μƒκ°ν•˜λ©΄ νŽΈν•˜λ‹€.
    λ©”μ†Œλ“œκ°€ 호좜되면 stack μ˜μ—­μ— λ©”μ†Œλ“œλ₯Ό μœ„ν•œ μ˜μ—­μ΄ ν• λ‹Ήλ˜κ³ , 호좜된 λ©”μ†Œλ“œλ“€μ΄ 싀행이 μ™„λ£Œλ˜λ©΄ stack μ˜μ—­μ— ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간은 사라진닀.
    λ©”μ†Œλ“œκ°€ μ™„λ£Œλœ μ΄ν›„μ—λŠ” ν˜ΈμΆœν–ˆλ˜ μœ„μΉ˜λ‘œ λ‹€μ‹œ λŒμ•„κ°€μ„œ κ·Έ 이후 μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ”λ°, methodA() β†’ methodB() β†’ methodC() 와 같이 ν˜ΈμΆœλ˜μ—ˆκΈ° λ•Œλ¬Έμ— λ©”μ†Œλ“œκ°€ 끝날 λ•ŒλŠ” methodC() β†’ methodB() β†’ methodA() 와 같이 λŒμ•„κ°€κ²Œ λœλ‹€.

  • μœ„μ˜ μ˜ˆμ œμ™€ λΉ„μŠ·ν•˜μ§€λ§Œ λ‹€λ₯Έ 흐름을 ν™•μΈν•΄λ³΄μž.
    public class Application {
    
       public static void main(String[] args) {
    
          System.out.println("main() μ‹œμž‘ν•¨...");
    
          Application app = new Application();
          app.methodA();
          app.methodB();
          app.methodC();
    
          System.out.println("main() μ’…λ£Œλ¨...");
    
       }
    
       public void methodA() {
    
          System.out.println("methodA() 호좜됨...");
          System.out.println("methodA() μ’…λ£Œλ¨...");
    
       }
    
       public void methodB() {
    
          System.out.println("methodB() 호좜됨...");
          System.out.println("methodB() μ’…λ£Œλ¨...");
    
       }
    
       public void methodC() {
    
          System.out.println("methodC() 호좜됨...");
          System.out.println("methodC() μ’…λ£Œλ¨...");
    
       }
    
    }
    • μ‹€ν–‰κ²°κ³Ό
      main() μ‹œμž‘ν•¨...
      methodA() 호좜됨...
      methodA() μ’…λ£Œλ¨...
      methodB() 호좜됨...
      methodB() μ’…λ£Œλ¨...
      methodC() 호좜됨...
      methodC() μ’…λ£Œλ¨...
      main() μ’…λ£Œλ¨...
  • μ•„κΉŒμ™€λŠ” 좜λ ₯ κ²°κ³Όκ°€ λ‹€λ₯΄λ‹€. μ™œ 그런걸까? μ΄μ „μ˜ μ†ŒμŠ€λŠ” λ©”μ†Œλ“œ μ•ˆμ—μ„œ λ‹€λ₯Έ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν–ˆμ—ˆλ‹€.
    ν•˜μ§€λ§Œ μ§€κΈˆμ€ λͺ¨λ“  λ©”μ†Œλ“œλ₯Ό main()μ—μ„œ ν˜ΈμΆœν•˜κ³  있고, 각 λ©”μ†Œλ“œ μž‘μ—…μ΄ μ™„λ£Œλœ ν›„ λ‹€λ₯Έ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ— κ²°κ³Όκ°€ λ‹€λ₯Ό μˆ˜λ°–μ— μ—†λ‹€.

μ „λ‹¬μΈμž(argument)와 λ§€κ°œλ³€μˆ˜(parameter)λ₯Ό μ΄μš©ν•œ λ©”μ†Œλ“œ 호좜

  • μ§€κΈˆκΉŒμ§€ μš°λ¦¬κ°€ 배운 λ³€μˆ˜λŠ” μ§€μ—­λ³€μˆ˜μ— ν•΄λ‹Ήν•œλ‹€. λ‹€μ–‘ν•œ λ³€μˆ˜μ˜ μ’…λ₯˜λ“€μ΄ μ‘΄μž¬ν•˜λŠ”λ° μ°¨μ°¨ λ°°μ›Œ λ‚˜κ°ˆ 것이닀.
  • λ³€μˆ˜μ˜ μ’…λ₯˜
    • μ§€μ—­λ³€μˆ˜
    • λ§€κ°œλ³€μˆ˜
    • μ „μ—­λ³€μˆ˜(ν•„λ“œ)
    • 클래슀(static)λ³€μˆ˜
  • μ§€μ—­λ³€μˆ˜λŠ” μ„ μ–Έν•œ λ©”μ†Œλ“œ λΈ”λŸ­ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 이것을 μ§€μ—­λ³€μˆ˜μ˜ μŠ€μ½”ν”„λΌκ³  ν•œλ‹€.
  • λ‹€λ₯Έ λ©”μ†Œλ“œκ°„ μ„œλ‘œ κ³΅μœ ν•΄μ•Ό ν•˜λŠ” 값이 μ‘΄μž¬ν•˜λŠ” 경우 λ©”μ†Œλ“œ 호좜 μ‹œ μ‚¬μš©ν•˜λŠ” κ΄„ν˜Έλ₯Ό μ΄μš©ν•΄μ„œ 값을 전달할 수 μžˆλ‹€.
    이 λ•Œ μ „λ‹¬ν•˜λŠ” 값을 μ „λ‹¬μΈμž(argument) 라고 λΆ€λ₯΄κ³ , λ©”μ†Œλ“œ μ„ μ–ΈλΆ€ κ΄„ν˜Έ μ•ˆμ— 전달 인자λ₯Ό λ°›κΈ° μœ„ν•΄ μ„ μ–Έν•˜λŠ” λ³€μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜(parameter)라고 λΆ€λ₯Έλ‹€.

λ©”μ†Œλ“œ 리턴

  • λ©”μ†Œλ“œλŠ” 항상 λ§ˆμ§€λ§‰μ— returnλͺ…λ Ήμ–΄κ°€ μ‘΄μž¬ν•œλ‹€.
  • return은 μžμ‹ μ„ ν˜ΈμΆœν•œ ꡬ문으둜 λ³΅κ·€ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • 볡귀λ₯Ό ν•  λ•Œ κ·Έλƒ₯ 볡귀λ₯Ό ν•  μˆ˜λ„ μžˆμ§€λ§Œ, 값을 κ°€μ§€κ³  볡귀할 수 도 μžˆλ‹€. 이 λ•Œ κ°€μ§€κ³  κ°€λŠ” 값을 리턴값 이라고 ν•œλ‹€.
  • return값을 λ°˜ν™˜λ°›κΈ° μœ„ν•΄μ„œλŠ” λ©”μ†Œλ“œ 선언뢀에 리턴 νƒ€μž…μ„ λͺ…μ‹œν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.
  • voidλŠ” 아무 λ°˜ν™˜κ°’λ„ κ°€μ§€μ§€ μ•Šκ² λ‹€λŠ” λ¦¬ν„΄νƒ€μž…μ— μ‚¬μš©ν•  수 μžˆλŠ” ν‚€μ›Œλ“œμ΄λ‹€.
  • λ°˜ν™˜κ°’μ΄ μ—†λŠ” 경우 returnꡬ문은 μƒλž΅ν•΄λ„ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ£Όμ§€λ§Œ, λ°˜ν™˜κ°’μ΄ μžˆλŠ” κ²½μš°λŠ” returnꡬ문을 λ°˜λ“œμ‹œ λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
    λ˜ν•œ λ©”μ†Œλ“œ 선언뢀에 μ„ μ–Έν•œ λ¦¬ν„΄νƒ€μž… λ°˜ν™˜κ°’μ˜ μžλ£Œν˜•μ€ λ°˜λ“œμ‹œ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€.
  • λ©”μ†Œλ“œ 리턴 μ˜ˆμ‹œ
    public class Application {
    
       public static void main(String[] args) {
    
          Application app = new Application();
          app.testMethod();
    
          String returnText = app.testMethod();
          System.out.println(returnText);			//hello world 좜λ ₯됨
    
          /* λ³€μˆ˜μ— μ €μž₯ν•˜μ§€ μ•Šκ³  λ°”λ‘œ 좜λ ₯도 κ°€λŠ₯ν•˜λ‹€. */
          System.out.println(app.testMethod());
    
          System.out.println("main() λ©”μ†Œλ“œ μ’…λ£Œλ¨...");
    
       }
    
       public String testMethod() {
    
          /* public 뒀에 λ°”λ‘œ return으둜 κ°€μ§€κ³  갈 νƒ€μž…μ„ λͺ…μ‹œν•œλ‹€.
           * 아무 값도 λ¦¬ν„΄ν•˜μ§€ μ•ŠλŠ” 경우 void, 값을 λ°˜ν™˜ν•˜λŠ” κ²½μš°μ—λŠ” λ°˜ν™˜κ°’μ˜ μžλ£Œν˜•μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
           * */
          return "hello world";
       }
    }
    • μ‹€ν–‰κ²°κ³Ό
      hello world
      hello world
      main() λ©”μ†Œλ“œ μ’…λ£Œλ¨...

λ©”μ†Œλ“œ ν™œμš©

  • μ „λ‹¬μΈμžμ™€ λ§€κ°œλ³€μˆ˜ ν…ŒμŠ€νŠΈ
    public class Application {
    
       public static void main(String[] args) {
    
          Application app = new Application();
    
          /* μ „λ‹¬μΈμžμ™€ λ§€κ°œλ³€μˆ˜λ₯Ό μ΄μš©ν•œ λ©”μ†Œλ“œ 호좜 ν…ŒμŠ€νŠΈ */
          /* 1. μ „λ‹¬μΈμžλ‘œ κ°’ 전달 ν…ŒμŠ€νŠΈ */
          /* ν˜ΈμΆœν•˜λ €λŠ” λ©”μ†Œλ“œμ˜ λ§€κ°œλ³€μˆ˜ 선언뢀에 미리 μ„ μ–Έν•΄λ‘” μžλ£Œν˜•κ³Ό, 갯수, μˆœμ„œκ°€ μΌμΉ˜ν•˜κ²Œ 값을 λ„£μ–΄ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. */
          app.testMethod(40);
          //app.testMethod1("40");					//λ§€κ°œλ³€μˆ˜λŠ” intν˜•μ΄μ§€λ§Œ μΈμžκ°€ String ν˜•μ΄κΈ° λ•Œλ¬Έμ— ν˜ΈμΆœν•  수 μ—†λ‹€.
          //app.testMethod1(20, 30, 40);  	//λ§€κ°œλ³€μˆ˜λŠ” intν˜• 1개 μ΄μ§€λ§Œ μΈμžλŠ” 3개이기 λ•Œλ¬Έμ— ν˜ΈμΆœν•  수 μ—†λ‹€.
          //app.testMethod1();						  //λ§€κ°œλ³€μˆ˜λŠ” μ„ μ–Έλ˜μ–΄ μžˆμ§€λ§Œ 인자둜 값을 μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ ν˜ΈμΆœν•  수 μ—†λ‹€.
    
          /* 2. λ³€μˆ˜μ— μ €μž₯ν•œ κ°’ 전달 ν…ŒμŠ€νŠΈ */
          /* 2-1. λ³€μˆ˜μ— μ €μž₯된 값을 μ΄μš©ν•˜μ—¬ 값을 전달할 수 μžˆλ‹€. */
          int age = 20;
          app.testMethod(age);
    
          /* 2-2. μžλ™ν˜•λ³€ν™˜μ„ μ΄μš©ν•˜μ—¬ κ°’ 전달을 ν•  수 μžˆλ‹€. */
          byte byteAge = 10;
          app.testMethod(byteAge);
    
          /* 2-3. κ°•μ œν˜•λ³€ν™˜μ„ μ΄μš©ν•΄μ„œ κ°’ 전달을 ν•  수 μžˆλ‹€. */
          long longAge = 80;
          //app.testMethod(longAge);		  //μžλ™ ν˜•λ³€ν™˜μ„ ν•  수 μ—†μ–΄μ„œ μ—λŸ¬ λ°œμƒ
          app.testMethod((int) longAge);	//κ°•μ œ ν˜•λ³€ν™˜μ„ μ΄μš©ν•˜μ—¬ μžλ£Œν˜•μ„ 맞좘 ν›„ ν˜ΈμΆœν•  수 μžˆλ‹€. (데이터 손싀 주의)
    
          /* 2-4. μ—°μ‚° κ²°κ³Όλ₯Ό μ΄μš©ν•΄μ„œ κ°’ 전달을 ν•  수 μžˆλ‹€. */
          app.testMethod(age * 3);
       }
    
       public void testMethod(int age) {
          System.out.println("λ‹Ήμ‹ μ˜ λ‚˜μ΄λŠ” " + age + "μ„Έ μž…λ‹ˆλ‹€.");
       }
    }
    • μ‹€ν–‰κ²°κ³Ό
      λ‹Ήμ‹ μ˜ λ‚˜μ΄λŠ” 40μ„Έ μž…λ‹ˆλ‹€.
      λ‹Ήμ‹ μ˜ λ‚˜μ΄λŠ” 20μ„Έ μž…λ‹ˆλ‹€.
      λ‹Ήμ‹ μ˜ λ‚˜μ΄λŠ” 10μ„Έ μž…λ‹ˆλ‹€.
      λ‹Ήμ‹ μ˜ λ‚˜μ΄λŠ” 80μ„Έ μž…λ‹ˆλ‹€.
      λ‹Ήμ‹ μ˜ λ‚˜μ΄λŠ” 60μ„Έ μž…λ‹ˆλ‹€.
  • μ—¬λŸ¬ 개의 μ „λ‹¬μΈμžλ₯Ό κ°€μ§„ λ©”μ†Œλ“œ ν…ŒμŠ€νŠΈ
    public class Application {
    
       public static void main(String[] args) {
    
          /* μ—¬λŸ¬ 개의 μ „λ‹¬μΈμžλ₯Ό μ΄μš©ν•œ λ©”μ†Œλ“œ 호좜 ν…ŒμŠ€νŠΈ */
          /* 1. μ—¬λŸ¬ 개의 λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§„ λ©”μ†Œλ“œ 호좜 */
          Application app = new Application();
          app.testMethod("홍길동", 20, '남');
          //app.testMethod(20, "μœ κ΄€μˆœ", 'μ—¬');					//κ°’μ˜ κ°―μˆ˜λŠ” λ§žμ§€λ§Œ μˆœμ„œκ°€ λ‹€λ₯΄κ²Œ μ „λ‹¬λ˜λ©΄ ν˜ΈμΆœν•˜μ§€ λͺ»ν•œλ‹€.
    
          /* 2. λ³€μˆ˜μ— μ €μž₯된 값을 μ „λ‹¬ν•˜λ©° ν˜ΈμΆœν•  수 μžˆλ‹€. */
          String name = "μœ κ΄€μˆœ";
          int age = 20;
          char gender = 'μ—¬';
    
          app.testMethod(name, age, gender);
       }
    
       public void testMethod(String name, int age, final char gender) {
    
          /* λ§€κ°œλ³€μˆ˜λ„ μΌμ’…μ˜ μ§€μ—­λ³€μˆ˜λ‘œ λΆ„λ₯˜λœλ‹€.
           * λ§€κ°œλ³€μˆ˜ μ—­μ‹œ final ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
           * μ§€μ—­λ³€μˆ˜μ— final ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬ μƒμˆ˜λ₯Ό λ§Œλ“œλŠ” 것과 λ™μΌν•˜λ‹€.
           * final λ§€κ°œλ³€μˆ˜λŠ” μƒμˆ˜ 넀이밍 κ·œμΉ™μ„ μ„ νƒμ μœΌλ‘œ λ”°λ₯΄λŠ” κ²½ν–₯이 μžˆλ‹€. (써도 되고 μ•ˆμ¨λ„ 됨)
           * */
    
          System.out.println("λ‹Ήμ‹ μ˜ 이름은 " + name + "이고, λ‚˜μ΄λŠ” " + age + "μ„Έ 이며, 성별은 " + gender + "μž…λ‹ˆλ‹€.");
    
          /* λ©”μ†Œλ“œ 주석도 λ‹¬μ•„μ£Όμž. ν˜ΈμΆœκ΅¬λ¬Έμ— 마우슀λ₯Ό 올리면 λ©”μ†Œλ“œμ— λŒ€ν•œ μ„€λͺ…을 λ³Ό 수 μžˆλ‹€. */
       }
    
    }
    • μ‹€ν–‰κ²°κ³Ό
      λ‹Ήμ‹ μ˜ 이름은 홍길동이고, λ‚˜μ΄λŠ” 20μ„Έ 이며, 성별은 λ‚¨μž…λ‹ˆλ‹€.
      λ‹Ήμ‹ μ˜ 이름은 μœ κ΄€μˆœμ΄κ³ , λ‚˜μ΄λŠ” 20μ„Έ 이며, 성별은 μ—¬μž…λ‹ˆλ‹€.
  • λ©”μ†Œλ“œ 리턴 ν…ŒμŠ€νŠΈ
    public class Application {
    
       public static void main(String[] args) {
    
          /* λ©”μ†Œλ“œ 리턴 ν…ŒμŠ€νŠΈ */
          /* λͺ¨λ“  λ©”μ†Œλ“œ λ‚΄λΆ€μ—λŠ” return; 이 μ‘΄μž¬ν•œλ‹€.
           * void λ©”μ†Œλ“œμ˜ 경우 return;을 λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ λ§ˆμ§€λ§‰μ€„μ— μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μΆ”κ°€λ₯Ό ν•΄μ€€λ‹€.
           * return은 ν˜„μž¬ λ©”μ†Œλ“œλ₯Ό κ°•μ œ μ’…λ£Œν•˜κ³  ν˜ΈμΆœν•œ ꡬ문으둜 λ‹€μ‹œ λŒμ•„κ°€λŠ” λͺ…령어이닀.
           * */
    
          /* main() λ©”μ†Œλ“œκ°€ μ‹œμž‘ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 좜λ ₯ ꡬ문 μž‘μ„± */
          System.out.println("main() λ©”μ†Œλ“œ μ‹œμž‘ν•¨...");
    
          Application app = new Application();
          app.testMethod();
    
          /* main() λ©”μ†Œλ“œκ°€ μ’…λ£Œλ˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 좜λ ₯ ꡬ문 μž‘μ„± */
          System.out.println("main() λ©”μ†Œλ“œ μ’…λ£Œλ¨...");
       }
    
       public void testMethod() {
          System.out.println("testMethod() λ™μž‘ 확인...");
    
          /* μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μžλ™μœΌλ‘œ μΆ”κ°€λ˜λŠ” ꡬ문이닀.
           * κ°€μž₯ λ§ˆμ§€λ§‰μ— μž‘μ„±ν•΄μ•Ό ν•˜κ³ , λ§ˆμ§€λ§‰μ— μž‘μ„±λ˜μ§€ μ•Šμ„ 경우 컴파일 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€.
           *  */
          return;
    
          //System.out.println("test");			// return μ•„λž˜ λ‹€λ₯Έ ꡬ문이 μžˆμ„ 경우 μ—λŸ¬ λ°œμƒ, return은 λ©”μ†Œλ“œ κ°€μž₯ λ§ˆμ§€λ§‰μ— μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
       }
    }
    • μ‹€ν–‰κ²°κ³Ό
      main() λ©”μ†Œλ“œ μ‹œμž‘ν•¨...
      testMethod() λ™μž‘ 확인...
      main() λ©”μ†Œλ“œ μ’…λ£Œλ¨...
  • λ§€κ°œλ³€μˆ˜μ™€ 리턴값 볡합 ν™œμš©
    public class Application {
    
       public static void main(String[] args) {
    
          /* λ§€κ°œλ³€μˆ˜μ™€ 리턴값 볡합 ν™œμš© */
          /* λ§€κ°œλ³€μˆ˜λ„ μ‘΄μž¬ν•˜κ³  리턴값도 μ‘΄μž¬ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ κ°„λ‹¨ν•œ 계산기 λ§Œλ“€κΈ° */
    
          /* 숫자 두 개λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μž…λ ₯ λ°›μ•„ μ—°μ‚°ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό
           * μ‚¬μΉ™μ—°μ‚°λ³„λ‘œ μΆ”κ°€ν•΄μ„œ ν˜ΈμΆœν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό ν•΄λ³΄μž
           * */
          int first = 20;
          int second = 10;
    
          Application app = new Application();
          System.out.println("두 수λ₯Ό λ”ν•œ κ²°κ³Ό : " + app.plusTwoNumbers(first, second));
          System.out.println("두 수λ₯Ό λΊ€ κ²°κ³Ό : " + app.minusTwoNumbers(first, second));
          System.out.println("두 수λ₯Ό κ³±ν•œ κ²°κ³Ό : " + app.multipleTwoNumbers(first, second));
          System.out.println("두 수λ₯Ό λ‚˜λˆˆ κ²°κ³Ό : " + app.divideTwoNumbers(first, second));
       }
    
       public int plusTwoNumbers(int first, int second) {
    
          return first + second;
       }
    
       public int minusTwoNumbers(int first, int second) {
    
          return first - second;
       }
    
       public int multipleTwoNumbers(int first, int second) {
    
          return first * second;
       }
    
       public int divideTwoNumbers(int first, int second) {
    
          return first / second;
       }
    }
    • μ‹€ν–‰κ²°κ³Ό
      두 수λ₯Ό λ”ν•œ κ²°κ³Ό : 30
      두 수λ₯Ό λΊ€ κ²°κ³Ό : 10
      두 수λ₯Ό κ³±ν•œ κ²°κ³Ό : 200
      두 수λ₯Ό λ‚˜λˆˆ κ²°κ³Ό : 2
  • static λ©”μ†Œλ“œ ν…ŒμŠ€νŠΈ
    public class Application {
    
       public static void main(String[] args) {
    
          /* static λ©”μ†Œλ“œ 호좜 */
          /* μš°λ¦¬κ°€ μ§€κΈˆ μž‘μ„±ν•˜κ³  μžˆλŠ” λ©”μ†Œλ“œλ₯Ό 보면 publicκ³Ό void 사이에 static이라고 ν•˜λŠ” ν‚€μ›Œλ“œκ°€ μžˆλ‹€.
           * static ν‚€μ›Œλ“œμ— λŒ€ν•΄μ„œλŠ” λ’€μ—μ„œ λ‹€μ‹œ λ‹€λ£¨κ²Œ 될 μ˜ˆμ •μ΄μ§€λ§Œ,
           * static λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 방법뢀터 λ¨Όμ € ν•™μŠ΅ν•΄λ³΄μž.
           * static이 μžˆλŠ” λ©”μ†Œλ“œμ΄κ±΄ non-static λ©”μ†Œλ“œμ΄κ±΄ λ©”μ†Œλ“œμ˜ λ™μž‘ 흐름은 λ™μΌν•˜λ‹€.
           * */
    
          /* λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•œ 이후 static λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄λ³΄μž */
          /* static λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 방법
           * 클래슀λͺ….λ©”μ†Œλ“œλͺ…();  <- 이런 λ°©μ‹μœΌλ‘œ ν˜ΈμΆœν•œλ‹€.
           * */
          System.out.println("10κ³Ό 20의 ν•© : " + Application.sumTwoNumbers(10, 20));
    
          /* λ™μΌν•œ 클래슀 내에 μž‘μ„±λœ static λ©”μ†Œλ“œλŠ” 클래슀λͺ… μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€. */
          System.out.println("20κ³Ό 30의 ν•© : " +sumTwoNumbers(20, 30));
    
       }
    
    		public static int sumTwoNumbers(int first, int second) {
    
           return first + second;
    	  }
    }
    • μ‹€ν–‰κ²°κ³Ό
      10κ³Ό 20의 ν•© : 30
      20κ³Ό 30의 ν•© : 50
  • λ‹€λ₯Έ ν΄λž˜μŠ€μ— μž‘μ„±ν•œ non-staticλ©”μ†Œλ“œμ™€ static λ©”μ†Œλ“œ 호좜 ν…ŒμŠ€νŠΈ
    public class Calculator {
    
        public int minNumberOf(int first, int second) {
    
            return (first > second)? second : first;
        }
    
        public static int maxNumberOf(int first, int second) {
    
            return (first > second)? first : second;
        }
    
    }
    public class Application {
    
       public static void main(String[] args) {
    
          /* λ‹€λ₯Έ ν΄λž˜μŠ€μ— μž‘μ„±ν•œ λ©”μ†Œλ“œ 호좜 */
    
          /* μ΅œλŒ€κ°’ μ΅œμ†Ÿκ°’μ„ 비ꡐ할 두 μ •μˆ˜λ₯Ό λ³€μˆ˜λ‘œ μ„ μ–Έ */
          int first = 100;
          int second = 50;
    
          /* 두 λ©”μ†Œλ“œλ₯Ό μ°¨λ‘€λ‘œ ν˜ΈμΆœν•΄λ³΄μž */
          /* 1. non-static λ©”μ†Œλ“œμ˜ 경우 */
          /* ν΄λž˜μŠ€κ°€ λ‹€λ₯΄λ”라도 μ‚¬μš©ν•˜λŠ” 방법은 λ™μΌν•˜λ‹€
           * 클래슀λͺ… μ‚¬μš©ν• μ΄λ¦„ = new 클래슀λͺ…();
           * μ‚¬μš©ν• μ΄λ¦„.λ©”μ†Œλ“œλͺ…();
           * */
          Calculator calc = new Calculator();
          int min = calc.minNumberOf(first, second);
    
          System.out.println("두 수 쀑 μ΅œμ†Œκ°’μ€ : " + min);
    
          /* 2. static λ©”μ†Œλ“œμΈ 경우 */
          /* λ‹€λ₯Έ ν΄λž˜μŠ€μ— μž‘μ„±ν•œ static λ©”μ†Œλ“œμ˜ 경우 ν˜ΈμΆœν•  λ•Œ 클래슀λͺ…을 λ°˜λ“œμ‹œ κΈ°μˆ ν•΄μ•Ό ν•œλ‹€.
           * 클래슀λͺ….λ©”μ†Œλ“œλͺ…();
           * */
          //int max = maxNumberOf(first, second);				//클래슀λͺ…을 μƒλž΅ν•˜λ©΄ μ—λŸ¬ λ°œμƒν•œλ‹€.
          int max = Calculator.maxNumberOf(first, second);
    
          System.out.println("두 수 쀑 μ΅œλŒ€κ°’μ€ : " + max);
    
          /* 주의!
           * static λ©”μ†Œλ“œλ„ non-static λ©”μ†Œλ“œμ²˜λŸΌ ν˜ΈμΆœμ€ κ°€λŠ₯ν•˜λ‹€.
           * ν•˜μ§€λ§Œ ꢌμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.
           * 이미 λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ˜μ–΄ μžˆλŠ” static λ©”μ†Œλ“œλŠ” μ—¬λŸ¬ 객체가 κ³΅μœ ν•˜κ²Œ λœλ‹€.
           * κ·Έ λ•Œ 객체둜 μ ‘κ·Όν•˜κ²Œ 되면 μΈμŠ€ν„΄μŠ€κ°€ κ°€μ§„ κ°’μœΌλ‘œ 곡유된 값에 μ˜ˆμƒμΉ˜ λͺ»ν•˜λŠ” λ™μž‘μ„ μœ λ°œν•  수 있기 λ•Œλ¬Έμ—
           * μ‚¬μš©μ„ μ œν•œν•΄ λ‹¬λΌλŠ” 경고이닀. μ‹œμŠ€ν…œμ΄ λ³΅μž‘ν•΄μ§ˆ 수둝 이런 μ—λŸ¬λ₯Ό μ°ΎκΈ° νž˜λ“€μ–΄μ§€κ²Œ λœλ‹€.
           * */
          int max2 = calc.maxNumberOf(first, second);
    
          System.out.println("두 수 쀑 더 큰 값은 : " + max2);		//ν•˜μ§€λ§Œ μ •μƒμ μœΌλ‘œ 싀행은 κ°€λŠ₯ν•˜λ‹€.
       }
    }
    • μ‹€ν–‰κ²°κ³Ό
      두 수 쀑 μ΅œμ†Œκ°’μ€ : 50
      두 수 쀑 μ΅œλŒ€κ°’μ€ : 100
      두 수 쀑 더 큰 값은 : 100

νŒ¨ν‚€μ§€(package)

πŸ’‘ νŒ¨ν‚€μ§€λž€ μ„œλ‘œ κ΄€λ ¨ μžˆλŠ” 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ 등을 λͺ¨μ•„ ν•˜λ‚˜μ˜ 묢음(κ·Έλ£Ή)으둜 λ‹¨μœ„λ₯Ό κ΅¬μ„±ν•˜λŠ” 것을 λ§ν•œλ‹€.

  • 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλŠ” λ™μΌν•œ μ΄λ¦„μ˜ 클래슀λ₯Ό λ§Œλ“€ 수 μ—†μ§€λ§Œ, νŒ¨ν‚€μ§€κ°€ λ‹€λ₯΄λ©΄ λ™μΌν•œ 이름을 κ°€μ§„ 클래슀λ₯Ό λ§Œλ“€ μˆ˜λ„ μžˆλ‹€.
  • 클래슀λͺ…은 μ›λž˜ νŒ¨ν‚€μ§€λͺ…을 ν¬ν•¨ν•˜κ³  μžˆλ‹€.
    • 예) kr.ac.samhyook.method.Calculator (이게 클래슀λͺ…)
  • μ§€κΈˆκΉŒμ§€ 클래슀 λͺ…에 νŒ¨ν‚€μ§€ λͺ…을 ν•¨κ»˜ μ‚¬μš©ν•˜μ§€ μ•Šμ€ μ΄μœ λŠ” λ™μΌν•œ νŒ¨ν‚€μ§€ λ‚΄μ—μ„œ μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€.
    κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ„œλ‘œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ‘΄μž¬ν•˜λŠ” 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” 클래슀λͺ… μ•žμ— νŒ¨ν‚€μ§€λͺ…을 λͺ…μ‹œν•΄μ„œ ν’€ 클래슀 μ΄λ¦„μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

νŒ¨ν‚€μ§€μ˜ μ„ μ–Έ

package νŒ¨ν‚€μ§€λͺ…;
  • ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ˜ μ†ŒμŠ€νŒŒμΌ(.java)의 μ΅œμƒλ‹¨μ— μ„ μ–Έλ˜μ–΄μ•Ό ν•œλ‹€.
  • 클래슀 λͺ…λͺ…κ·œμΉ™κ³Ό λ‹€λ₯΄κ²Œ μ†Œλ¬Έμžλ‘œλ§Œ μž‘μ„±ν•˜λŠ” 것을 μ›μΉ™μœΌλ‘œ ν•œλ‹€.
  • νŒ¨ν‚€μ§€ λͺ…을 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μ μœΌλ‘œ 이름 μ—†λŠ” νŒ¨ν‚€μ§€μ— μ†ν•˜κ²Œ λœλ‹€.

νŒ¨ν‚€μ§€ 확인

  • νŒ¨ν‚€μ§€ 확인
    package ac.kr.samhyook.calculator;
    
    public class Calculator {
    		...
    }
    package ac.kr.samhyook.method;
    
    public class Application {
    
       public static void main(String[] args) {
    
    			/* μ‚¬μš©ν•΄μ•Όν•˜λŠ” 클래슀의 νŒ¨ν‚€μ§€κ°€ λ‹€λ₯Έ 경우 ν’€ 클래슀 이름을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. */
          ac.kr.samhyook.method.Calculator cal = new ac.kr.samhyook.method.Calculator();
    
          /* non-static λ©”μ†Œλ“œμ˜ 경우 */
          int min = cal.minNumberOf(30, 20);
          System.out.println("30κ³Ό 20쀑 더 μž‘μ€ 값은 : " + min);
    
          /* static λ©”μ†Œλ“œμ˜ 경우 */
          int max = ac.kr.samhyook.method.Calculator.maxNumberOf(30, 20);
          System.out.println("30κ³Ό 20쀑 더 큰 값은 : " + max);
    
       }

μž„ν¬νŠΈ(import)

πŸ’‘ μ„œλ‘œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μ‘΄μž¬ν•˜λŠ” 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 νŒ¨ν‚€μ§€λͺ…을 ν¬ν•¨ν•œ ν’€ 클래슀 이름을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
ν•˜μ§€λ§Œ 맀번 λ‹€λ₯Έ 클래슀의 νŒ¨ν‚€μ§€λͺ…κΉŒμ§€ κΈ°μˆ ν•˜κΈ°μ—λŠ” λ²ˆκ±°λ‘­λ‹€.
κ·Έλž˜μ„œ νŒ¨ν‚€μ§€λͺ…을 μƒλž΅ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œ ꡬ문이 import ꡬ문이닀.

μž„ν¬νŠΈ μ„ μ–Έ

package νŒ¨ν‚€μ§€λͺ…;

import νŒ¨ν‚€μ§€λͺ….*;
import νŒ¨ν‚€μ§€λͺ….클래슀λͺ…;
import static νŒ¨ν‚€μ§€λͺ….클래슀λͺ…;

...클래슀
  • import 문은 μ—¬λŸ¬ 개 λͺ…μ‹œν•  수 μžˆλ‹€.
  • import λŠ” package μ„ μ–Έλ¬Έκ³Ό class μ„ μ–Έλ¬Έ 사이에 μž‘μ„±ν•˜λ©° μ–΄λ– ν•œ νŒ¨ν‚€μ§€ 내에 μžˆλŠ” 클래슀λ₯Ό μ‚¬μš©ν•  것인지에 λŒ€ν•΄ 미리 μ„ μ–Έν•˜λŠ” 효과λ₯Ό κ°€μ§„λ‹€.
  • import 문은 μ†ŒμŠ€νŒŒμΌ(.java) μ—μ„œ package λ¬Έκ³Ό 클래슀 μ„ μ–Έλ¬Έ 사이에 λͺ…μ‹œν•œλ‹€.
  • static import 문은 static λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©ν•œλ‹€.

μž„ν¬νŠΈ 확인

  • μž„ν¬νŠΈ 확인
    package ac.kr.samhyook.calculator;
    
    public class Calculator {
    		...
    }
    package ac.kr.samhyook.method;
    
    /* μ‚¬μš©ν•˜λ €λŠ” ν΄λž˜μŠ€κΉŒμ§€λ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€. */
    import ac.kr.samhyook.calculator.Calculator;
    /* static import의 경우 μ‚¬μš©ν•˜λ €λŠ” static methodκΉŒμ§€ μ „λΆ€ μ¨μ€˜μ•Ό ν•œλ‹€. */
    import static ac.kr.samhyook.calculator.Calculator.maxNumberOf;
    
    public class Application {
    
       public static void main(String[] args) {
    
          Calculator cal = new Calculator();
    
          /* non-static λ©”μ†Œλ“œμ˜ 경우 */
          int min = cal.minNumberOf(30, 20);
          System.out.println("30κ³Ό 20쀑 더 μž‘μ€ 값은 : " + min);
    
          /* static λ©”μ†Œλ“œλ₯Ό static μž„ν¬νŠΈ ν•œ 경우 클래슀λͺ…도 μƒλž΅ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€. */
          int max = maxNumberOf(30, 20);
          System.out.println("30κ³Ό 20쀑 더 큰 값은 : " + max);
       }
    }

API

πŸ’‘ Application Programming Interface(API)λŠ” μ‘μš©ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘,
μš΄μ˜μ²΄μ œλ‚˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ œμ–΄ν•  수 μžˆλ„λ‘ λ§Œλ“  μΈν„°νŽ˜μ΄μŠ€λ₯Ό λœ»ν•œλ‹€.

  • μ‰½κ²Œ 말해 μš°λ¦¬κ°€ κ΅¬ν˜„ν•  수 μ—†κ±°λ‚˜ κ΅¬ν˜„ν•˜κΈ° 번거둜운 κΈ°λŠ₯듀을 JDKλ₯Ό μ„€μΉ˜ν•˜λ©΄ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ œκ³΅ν•œ μ†ŒμŠ€μ½”λ“œ(ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€)듀을 μ˜λ―Έν•œλ‹€.
  • 더 μ‰½κ²Œ 말해 λˆ„κ°€ μž‘μ„±ν•΄ 놓은 μ†ŒμŠ€μ½”λ“œμ΄λ‹ˆ κ°€μ Έλ‹€ μ“°λŠ” 방법을 μ œκ³΅ν•΄ μ£ΌλŠ” 것이닀.
  • λͺ¨λ“  μ½”λ“œλ₯Ό μš°λ¦¬κ°€ λ‹€ μ™ΈμšΈ 수 μ—†μœΌλ‹ˆ API λ¬Έμ„œλ₯Ό λ³„λ„λ‘œ μ œκ³΅ν•΄μ£Όκ³  μžˆλ‹€.

Math 클래슀

Math ν΄λž˜μŠ€λž€?

πŸ’‘ Math ν΄λž˜μŠ€λŠ” μˆ˜ν•™μ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” μƒμˆ˜λ“€κ³Ό ν•¨μˆ˜ 듀을 미리 κ΅¬ν˜„ν•΄ 놓은 ν΄λž˜μŠ€μ΄λ‹€.
APIλ¬Έμ„œλ₯Ό ν™•μΈν•΄λ³΄μž.(https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html)

Math ν΄λž˜μŠ€λŠ” static member둜만 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
즉, Math.λ©”μ†Œλ“œ() 와 같이 Math ν΄λž˜μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” APIλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

Math 클래슀 확인

  • java.lang.Math ν΄λž˜μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” API 확인
    public static void main(String[] args) {
       
       /* μ ˆλŒ€κ°’ 좜λ ₯ */
       /* 클래슀의 full-name을 λ‹€ 적은 경우 */
       System.out.println("-7의 μ ˆλŒ€κ°’ : " + (java.lang.Math.abs(-7)));
    
       /* java.langνŒ¨ν‚€μ§€λŠ” import ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄ λ†“μ•˜λ‹€.
        * μ»΄νŒŒμΌλŸ¬κ°€ import java.lang.*; 이 μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ„œ μ»΄νŒŒμΌμ„ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
        * */
       System.out.println("-1.25의 μ ˆλŒ€κ°’ : " + (Math.abs(-1.25)));
    
       /* μš°λ¦¬κ°€ Calculator에 λ§Œλ“  minκ³Ό maxλ₯Ό κ΅¬ν•˜λŠ” κΈ°λŠ₯도 이미 μ œκ³΅ν•˜κ³  μžˆλ‹€. */
       System.out.println("10κ³Ό 20쀑 더 μž‘μ€ 것은 : " + Math.min(10, 20));
       System.out.println("20κ³Ό 30쀑 더 큰 것은 : " + Math.max(20, 30));
    
       /* μˆ˜ν•™μ μœΌλ‘œ 많이 μ‚¬μš©ν•˜λŠ” κ³ μ •λœ 값듀도 이미 Math μ•ˆμ— μ •μ˜λœ 것이 μžˆλ‹€.
        * ν•„λ“œ λΌλŠ” 것을 μ΄μš©ν•œ 것인데 이 뢀뢄은 λ‚˜μ€‘μ— λ‹€λ£¨κ²Œ λ˜λ‹ˆ κ±±μ •ν•˜μ§€ 말자
        * */
       System.out.println("μ›μ£Όμœ¨ : " + Math.PI);			//μ›μ˜ λ‘˜λ ˆλ‚˜ 이런거 계산할 λ•Œ 미리 μ •μ˜λœ κ°’μ΄λ‹ˆ κ·Έλƒ₯ λΆˆλŸ¬λ‹€ μ“°λ©΄ λœλ‹€.
    
       /* λ‚œμˆ˜λ₯Ό λ°œμƒμ‹œν‚€λŠ” 것도 μžˆλ‹€
        * 0λΆ€ν„° 1 μ „κΉŒμ§€μ˜ μ‹€μˆ˜ ν˜•νƒœμ˜ λ‚œμˆ˜λ₯Ό λ°œμƒμ‹œν‚¨λ‹€.
        * μ–˜λŠ” ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ λ‹€λ₯Έ 값을 κ°€μ§„λ‹€.
        * */
       System.out.println("λ‚œμˆ˜ λ°œμƒ : " + Math.random());
    }
    • μ‹€ν–‰κ²°κ³Ό
      -7의 μ ˆλŒ€κ°’ : 7
      -1.25의 μ ˆλŒ€κ°’ : 1.25
      10κ³Ό 20쀑 더 μž‘μ€ 것은 : 10
      20κ³Ό 30쀑 더 큰 것은 : 30
      μ›μ£Όμœ¨ : 3.141592653589793
      λ‚œμˆ˜ λ°œμƒ : 0.24173158411816165
  • java.lang.Math ν΄λž˜μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” λ‚œμˆ˜ ν™œμš©
    public static void main(String[] args) {
    
       /* λ‚œμˆ˜μ˜ ν™œμš© */
       /* Math.random()을 μ΄μš©ν•΄ λ°œμƒν•œ λ‚œμˆ˜λŠ” 0λΆ€ν„° 1μ „κΉŒμ§€μ˜ μ‹€μˆ˜ λ²”μœ„μ˜ λ‚œμˆ˜κ°’μ„ λ°˜ν™˜ν•œλ‹€.
        * μ›ν•˜λŠ” λ²”μœ„μ˜ λ‚œμˆ˜λ₯Ό κ΅¬ν•˜λŠ” 곡식
        *(int) (Math.random * κ΅¬ν•˜λ €λŠ” λ‚œμˆ˜μ˜ 갯수) + κ΅¬ν•˜λ €λŠ” λ‚œμˆ˜μ˜ μ΅œμ†Œκ°’ 
        */ 
    
       /* 0 ~ 9κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ */
       int random1 = (int) (Math.random() * 10);
       System.out.println("0 λΆ€ν„° 9 μ‚¬μ΄μ˜ λ‚œμˆ˜ : " + random1);
    
       /* 1 ~ 10κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ */
       int random2 = (int) (Math.random() * 10) + 1;
       System.out.println("1 λΆ€ν„° 10 μ‚¬μ΄μ˜ λ‚œμˆ˜ : " + random2);
    
       /* 10 ~ 15κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ */
       int random3 = (int) (Math.random() * 6) + 10;
       System.out.println("10 λΆ€ν„° 15 μ‚¬μ΄μ˜ λ‚œμˆ˜ : " + random3);
    
       /* -128 ~ 127κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ */
       //int random4 = (int) (Math.random() * 256) + (-128);
       int random4 = (int) (Math.random() * 256) - 128;
       System.out.println("-128 λΆ€ν„° 127κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ : " + random4);
    }
    • μ‹€ν–‰κ²°κ³Ό
      0 λΆ€ν„° 9 μ‚¬μ΄μ˜ λ‚œμˆ˜ : 6
      1 λΆ€ν„° 10 μ‚¬μ΄μ˜ λ‚œμˆ˜ : 5
      10 λΆ€ν„° 15 μ‚¬μ΄μ˜ λ‚œμˆ˜ : 11
      -128 λΆ€ν„° 127κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ : 56
  • java.util.Random 을 μ΄μš©ν•œ λ‚œμˆ˜μ˜ ν™œμš©
    public static void main(String[] args) {
    
       /* java.util.Random 클래슀 */
       /* java.util.Random 클래슀의 nextInt() λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•œ λ‚œμˆ˜ λ°œμƒ
        * nextInt(int bound) : 0λΆ€ν„° λ§€κ°œλ³€μˆ˜λ‘œ 전달받은 μ •μˆ˜ λ²”μœ„κΉŒμ§€μ˜ λ‚œμˆ˜λ₯Ό λ°œμƒμ‹œμΌœμ„œ μ •μˆ˜ ν˜•νƒœλ‘œ λ°˜ν™˜ */
    
       /* μ›ν•˜λŠ” λ²”μœ„μ˜ λ‚œμˆ˜λ₯Ό κ΅¬ν•˜λŠ” 곡식
        * random.nextInt(κ΅¬ν•˜λ €λŠ” λ‚œμˆ˜μ˜ 갯수) + κ΅¬ν•˜λ €λŠ” λ‚œμˆ˜μ˜ μ΅œμ†Œκ°’
        * */
    
       Random random = new Random();
    
       /* 0 λΆ€ν„° 9κΉŒμ§€ λ‚œμˆ˜ λ°œμƒ */
       int randomNumber1 = random.nextInt(10);
       System.out.println("0 λΆ€ν„° 9 κΉŒμ§€μ˜ λ‚œμˆ˜ : " + randomNumber1);
    
       /* 1λΆ€ν„° 10κΉŒμ§€ λ‚œμˆ˜ λ°œμƒ */
       int randomNumber2 = random.nextInt(10) + 1;
       System.out.println("1 λΆ€ν„° 10 κΉŒμ§€μ˜ λ‚œμˆ˜ : " + randomNumber2);
    
       /* 20 λΆ€ν„° 45κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ */
       int randomNumber3 = random.nextInt(26) + 20;
       System.out.println("20 λΆ€ν„° 45 κΉŒμ§€μ˜ λ‚œμˆ˜ : " + randomNumber3);
    
       /* -128 λΆ€ν„° 127κΉŒμ§€μ˜ λ‚œμˆ˜ λ°œμƒ */
       //int randomNumber4 = random.nextInt(256) - 128;
       int randomNumber4 = new Random().nextInt(256) - 128;		//객체λ₯Ό μƒμ„±ν•˜μžλ§ˆμž λ°”λ‘œ λ©”μ†Œλ“œ ν˜ΈμΆœλ„ ν•  수 μžˆλ‹€.
       System.out.println("-128 λΆ€ν„° 127 κΉŒμ§€μ˜ λ‚œμˆ˜ : " + randomNumber4);
    }
    • μ‹€ν–‰κ²°κ³Ό
      0 λΆ€ν„° 9 κΉŒμ§€μ˜ λ‚œμˆ˜ : 7
      1 λΆ€ν„° 10 κΉŒμ§€μ˜ λ‚œμˆ˜ : 8
      20 λΆ€ν„° 45 κΉŒμ§€μ˜ λ‚œμˆ˜ : 34
      -128 λΆ€ν„° 127 κΉŒμ§€μ˜ λ‚œμˆ˜ : 102

Scanner 클래슀

μŠ€μΊλ„ˆ(Scanner) λž€?

πŸ’‘ μŠ€μΊλ„ˆ(Scanner)λž€ java.util.Scanner 클래슀λ₯Ό λ§ν•œλ‹€.
이 ν΄λž˜μŠ€λŠ” 읽은 λ°”μ΄νŠΈλ₯Ό 문자, 숫자, μ‹€μˆ˜, boolean, λ¬Έμžμ—΄ λ“± λ‹€μ–‘ν•œ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λ¦¬ν„΄ν•˜λŠ” ν΄λž˜μŠ€μ΄λ‹€.

  • ScannerλŠ” β€œν† ν° λ‹¨μœ„β€λ‘œ 데이터λ₯Ό 읽어 μ˜¨λ‹€. (토큰 : 곡백문자 - Spacebar/Tab/Enter 둜 ꡬ뢄 λ˜λŠ” μš”μ†Œ)

Scannerμ—μ„œ 자주 μ“°μ΄λŠ” λ©”μ„œλ“œ

λ©”μ„œλ“œκΈ°λŠ₯
next()String으둜 μ½μ–΄μ˜¨λ‹€.(띄어쓰기 μ΄ν›„λŠ” 읽지 μ•ŠμŒ)
nextLine()String으둜 μ½μ–΄μ˜¨λ‹€.(띄어쓰기 포함 ν•œ 쀄을 μ½λŠ”λ‹€. Enter μ΄μ „κΉŒμ§€)
nextInt()int둜 μ½μ–΄μ˜¨λ‹€.
nextBoolean()boolean으둜 μ½μ–΄μ˜¨λ‹€
nextByte()byte둜 μ½μ–΄μ˜¨λ‹€
nextShort()short둜 μ½μ–΄μ˜¨λ‹€
nextLong()long을 μ½μ–΄μ˜¨λ‹€
nextFloat()float둜 μ½μ–΄μ˜¨λ‹€
nextDouble()double둜 μ½μ–΄μ˜¨λ‹€

Scanner 확인

  • Scannerλ₯Ό μ΄μš©ν•΄ λ‹€μ–‘ν•œ κ°’ μž…λ ₯ ν…ŒμŠ€νŠΈ
    public static void main(String[] args) {
    
       /* java.util.Scannerλ₯Ό μ΄μš©ν•œ λ‹€μ–‘ν•œ μžλ£Œν˜• κ°’ μž…λ ₯ λ°›κΈ° */
       /* μ½˜μ†” 화면에 값을 μž…λ ₯ λ°›μ•„ 좜λ ₯해보기
        * 이런 μ–΄λ €μš΄ κΈ°λŠ₯ λ˜ν•œ 미리 JDKλ₯Ό μ„€μΉ˜ν•˜λ©΄ μ†μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ κ΅¬ν˜„ ν•΄ λ†“μ•˜λ‹€.
        * */
    
       /* 1. Scanner 객체 생성 */
       /* 1-1. μ›λž˜ μ΄λ ‡κ²Œ Scanner 객체λ₯Ό λ§Œλ“€μ–΄μ•Ό 함 */
       //java.util.Scanner sc = new java.util.Scanner(java.lang.System.in);
    
       /* 1-2. ν•˜μ§€λ§Œ java.lang은 νŒ¨ν‚€μ§€μ΄λ¦„ μƒλž΅ κ°€λŠ₯ν•˜λ‹€ */
       //java.util.Scanner sc = new java.util.Scanner(System.in);
    
       /* 1-3. λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μžˆλŠ” 클래슀 μ‚¬μš© μ‹œ νŒ¨ν‚€μ§€λͺ… μƒλž΅ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” ꡬ문은 λ°”λ‘œ import이닀. (import) */
       Scanner sc = new Scanner(System.in);		//java.util.Scanner importν•˜λ©΄ μ‚¬μš© μ€€λΉ„ 끝
    
       /* 2. μžλ£Œν˜•λ³„ κ°’ μž…λ ₯λ°›κΈ° */
       /* μž…λ ₯받을 λ•Œ μ•ˆλ‚΄λ¬Έκ΅¬λŠ” λ³„λ„λ‘œ 좜λ ₯ν•΄μ£Όμ§€ μ•ŠμœΌλ‹ˆ μš°λ¦¬κ°€ μž‘μ„±ν•΄μ€˜μ•Ό ν•œλ‹€. */
       /* print와 println은 쀄 λ°”κΏˆ 차이 이닀.
        * λ‹€μŒ 쀄에 μž…λ ₯을 λŒ€κΈ°μ‹œν‚€λŠ” 것이 μ•„λ‹ˆκ³  μ€„λ°”κΏˆν•˜μ§€ μ•Šκ³  μž…λ ₯λ°›κ²Œ ν•˜κΈ° μœ„ν•΄ printλ₯Ό μ‚¬μš©ν–ˆλ‹€
        * */
    
       /* 2-1. λ¬Έμžμ—΄ μž…λ ₯ λ°›κΈ° */
       /* nextLine() : μž…λ ₯받은 값을 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•΄μ€€λ‹€ */
       System.out.print("이름을 μž…λ ₯ν•˜μ„Έμš” : ");
       String name = sc.nextLine();
       System.out.println("μž…λ ₯ν•˜μ‹  이름은 " + name + "μž…λ‹ˆλ‹€.");
    
       /* 2-2. μ •μˆ˜ν˜• κ°’ μž…λ ₯ λ°›κΈ° */
       /* nextInt() : μž…λ ₯받은 값을 intν˜•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€. nextByte()/nextShort()λŠ” μƒλž΅ν•œλ‹€.
        * μˆ«μžκ°€ μ•„λ‹Œ 값을 μž…λ ₯ν•˜κ²Œ 되면 InputMismatchException이 λ°œμƒν•œλ‹€.
        * int λ²”μœ„λ₯Ό μ΄ˆκ³Όν•œ 값을 μž…λ ₯λ°›κ²Œ 되면 μ—­μ‹œ InputMismatchException이 λ°œμƒν•œλ‹€.
        * Exception은 λ‚˜μ€‘μ— λ‹€μ‹œ λ‹€λ£¨κ²Œ λ˜κ² μ§€λ§Œ μ‰½κ²Œ ν‘œν˜„ν•˜μžλ©΄ μ—λŸ¬ 같은 κ°œλ…μ΄λΌκ³  μƒκ°ν•˜μž.
        * */
       System.out.print("λ‚˜μ΄λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");
       int age = sc.nextInt();
       System.out.println("μž…λ ₯ν•˜μ‹  λ‚˜μ΄λŠ” " + age + "μž…λ‹ˆλ‹€.");
    
       /* nextLong() : μž…λ ₯받은 값을 long ν˜•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.
        * nextInt와 Exception이 λ°œμƒν•˜λŠ” μ΄μœ λŠ” λ™μΌν•˜λ‹€.
        * */
       System.out.print("κΈˆμ•‘μ„ μž…λ ₯ν•΄μ£Όμ„Έμš” : ");		//λ§Œμ•½ μ•ˆλ‚΄ ꡬ문을 μž‘μ„±ν•˜μ§€ μ•ŠμœΌλ©΄ κ·Έλƒ₯ λ©ˆμΆ˜κ²ƒ 처럼 보인닀. 사싀 κΈ°λ‹€λ¦¬λŠ” 쀑이닀.
       long money = sc.nextLong();
       System.out.println("μž…λ ₯ν•˜μ‹  κΈˆμ•‘μ€ " + money + "원 μž…λ‹ˆλ‹€.");
    
       /* 2-3. μ‹€μˆ˜ν˜• κ°’ μž…λ ₯ λ°›κΈ° */
       /* nextFloat() : μž…λ ₯받은 값을 float ν˜•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€. */
       /* μ •μˆ˜ ν˜•νƒœλ‘œ μž…λ ₯λ°›μœΌλ©΄ μ‹€μˆ˜λ‘œ λ³€ν™˜ ν›„ 정상 λ™μž‘
        * 길이λ₯Ό 길게 μž…λ ₯ν•˜λ©΄ μ†Œμˆ˜μ  8μ§Έ μžλ¦¬κΉŒμ§€λ§Œ ν‘œν˜„
        * μˆ«μžν˜•νƒœμ˜ 값이 μ•„λ‹Œ 경우 InputMismatchException λ°œμƒ
        * */
       System.out.print("ν‚€λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
       float height = sc.nextFloat();
       System.out.println("μž…λ ₯ν•˜μ‹  ν‚€λŠ” " + height + "cm μž…λ‹ˆλ‹€.");
    
       /* nextDouble() : μž…λ ₯받은 값을 double ν˜•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€. */
       /* μ •μˆ˜ ν˜•νƒœλ‘œ μž…λ ₯λ°›μœΌλ©΄ μ‹€μˆ˜λ‘œ λ³€ν™˜ ν›„ 정상 λ™μž‘
        * 길이λ₯Ό 길게 μž…λ ₯ν•˜λ©΄ μ†Œμˆ˜μ  17μ§Έ μžλ¦¬κΉŒμ§€λ§Œ ν‘œν˜„
        * μˆ«μžν˜•νƒœμ˜ 값이 μ•„λ‹Œ 경우 InputMismatchException λ°œμƒ
        * */
       System.out.print("μ›ν•˜λŠ” μ‹€μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : ");
       double number = sc.nextDouble();
       System.out.println("μž…λ ₯ν•˜μ‹  μ‹€μˆ˜λŠ” " + number + "μž…λ‹ˆλ‹€.");
    
       /* 2-4. λ…Όλ¦¬ν˜• κ°’ μž…λ ₯λ°›κΈ° */
       /* nextBoolean() : μž…λ ₯받은 값을 booleanν˜•μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.
        * true or false 외에 λ‹€λ₯Έ 값을 μž…λ ₯ν•˜κ²Œ 되면 InputMismatchException λ°œμƒν•¨
        * */
       System.out.print("μ°Έκ³Ό κ±°μ§“ 쀑에 ν•œ κ°€μ§€λ₯Ό true or false둜 μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
       boolean isTrue = sc.nextBoolean();
       System.out.println("μž…λ ₯ν•˜μ‹  논리 값은 " + isTrue + "μž…λ‹ˆλ‹€.");
    
       /* 2-5. λ¬Έμžν˜• κ°’ μž…λ ₯λ°›κΈ° */
       /* μ•„μ‰½κ²Œλ„ 문자λ₯Ό 직접 μž…λ ₯ λ°›λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
        * λ”°λΌμ„œ λ¬Έμžμ—΄λ‘œ μž…λ ₯을 λ°›κ³ , μž…λ ₯받은 λ¬Έμžμ—μ„œ μ›ν•˜λŠ” 순번째 문자λ₯Ό λΆ„λ¦¬ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
        * java.lang.String에 charAt(int index)λ₯Ό μ‚¬μš©ν•œλ‹€.
        * indexλ₯Ό μ •μˆ˜ν˜•μœΌλ‘œ μž…λ ₯ν•˜λ©΄ λ¬Έμžμ—΄μ—μ„œ ν•΄λ‹Ή μΈλ±μŠ€μ— μžˆλŠ” ν•œ 문자λ₯Ό 문자 ν˜•μœΌλ‘œ λ°˜ν™˜ν•΄μ£ΌλŠ” κΈ°λŠ₯을 ν•œλ‹€.
        *
        * indexλŠ” 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” 숫자 체계이며 μ»΄ν“¨ν„°μ—μ„œ 주둜 μ‚¬μš©λ˜λŠ” 방식이닀.
        * λ§Œμ•½ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 인덱슀λ₯Ό μž…λ ₯ν•˜κ²Œ 되면 IndexOutOfBoundsException이 λ°œμƒν•œλ‹€.
        * */
       sc.nextLine();		//이건 λ’€μ—μ„œ μ„€λͺ…ν•  μ˜ˆμ •μ΄λ‹€
       System.out.print("아무 λ¬Έμžλ‚˜ μž…λ ₯ ν•΄μ£Όμ„Έμš” : ");
       char ch = sc.nextLine().charAt(0);
       System.out.println("μž…λ ₯ν•˜μ‹  λ¬ΈμžλŠ” " + ch + "μž…λ‹ˆλ‹€.");
    }
    • μ‹€ν–‰κ²°κ³Ό
      이름을 μž…λ ₯ν•˜μ„Έμš” : **μ˜€μ§€λΌνΌ**
      μž…λ ₯ν•˜μ‹  이름은 μ˜€μ§€λΌνΌμž…λ‹ˆλ‹€.
      λ‚˜μ΄λ₯Ό μž…λ ₯ν•˜μ„Έμš” : **30**
      μž…λ ₯ν•˜μ‹  λ‚˜μ΄λŠ” 30μž…λ‹ˆλ‹€.
      κΈˆμ•‘μ„ μž…λ ₯ν•΄μ£Όμ„Έμš” : **900**
      μž…λ ₯ν•˜μ‹  κΈˆμ•‘μ€ 900원 μž…λ‹ˆλ‹€.
      ν‚€λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : **180**
      μž…λ ₯ν•˜μ‹  ν‚€λŠ” 180.0cm μž…λ‹ˆλ‹€.
      μ›ν•˜λŠ” μ‹€μˆ˜λ₯Ό μž…λ ₯ν•˜μ„Έμš” : **10.24**
      μž…λ ₯ν•˜μ‹  μ‹€μˆ˜λŠ” 10.24μž…λ‹ˆλ‹€.
      μ°Έκ³Ό κ±°μ§“ 쀑에 ν•œ κ°€μ§€λ₯Ό true or false둜 μž…λ ₯ν•΄μ£Όμ„Έμš” : **true**
      μž…λ ₯ν•˜μ‹  논리 값은 trueμž…λ‹ˆλ‹€.
      아무 λ¬Έμžλ‚˜ μž…λ ₯ ν•΄μ£Όμ„Έμš” : **ohgiraffer**
      μž…λ ₯ν•˜μ‹  λ¬ΈμžλŠ” oμž…λ‹ˆλ‹€.
  • nextLine()κ³Ό next() ν…ŒμŠ€νŠΈ
    public static void main(String[] args) {
    
       /* Scanner의 nextLine()과 next() */
       /* nextLine() : 곡백을 ν¬ν•¨ν•œ ν•œ 쀄을 μž…λ ₯을 μœ„ν•œ κ°œν–‰λ¬Έμž μ „ κΉŒμ§€ μ½μ–΄μ„œ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€. (곡백문자 포함)
        * next() : κ³΅λ°±λ¬Έμžλ‚˜ κ°œν–‰λ¬Έμž μ „ κΉŒμ§€λ₯Ό μ½μ–΄μ„œ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€. (곡백문자 ν¬ν•¨ν•˜μ§€ μ•ŠμŒ)
        * */
    
       /* 1. Scanner 객체 생성 */
       Scanner sc = new Scanner(System.in);
    
       /* 2. λ¬Έμžμ—΄ μž…λ ₯ */
       /* 2-1. nextLine() */
       System.out.print("인사말을 μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
       String greeting1 = sc.nextLine();		
    
       System.out.println(greeting1);			
    
       /* 2-2. next() */
       System.out.print("인사말을 μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
       String greeting2 = sc.next();			
    
       System.out.println(greeting2);			
    }
    • μ‹€ν–‰κ²°κ³Ό
      인사말을 μž…λ ₯ν•΄μ£Όμ„Έμš” : **μ•ˆλ…•ν•˜μ„Έμš” λ°˜κ°‘μŠ΅λ‹ˆλ‹€**
      μ•ˆλ…•ν•˜μ„Έμš” λ°˜κ°‘μŠ΅λ‹ˆλ‹€
      인사말을 μž…λ ₯ν•΄μ£Όμ„Έμš” : **μ•ˆλ…•ν•˜μ„Έμš” λ°˜κ°‘μŠ΅λ‹ˆλ‹€**
      μ•ˆλ…•ν•˜μ„Έμš”
  • Scanner μ‚¬μš©μ‹œ μ£Όμ˜μ‚¬ν•­ ν…ŒμŠ€νŠΈ (1)
    public static void main(String[] args) {
    
       /* μŠ€μΊλ„ˆ 주의 사항 */
    
       /* μŠ€μΊλ„ˆμ˜ next λ©”μ†Œλ“œλ“€μ€ μž…λ ₯ν•œ λ‚΄μš©μ„ λ²„νΌλ‘œλΆ€ν„° ν† ν°λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•΄μ„œ μ½μ–΄μ˜¨λ‹€.
        * κ·Έλž˜μ„œ 크게 두 κ°€μ§€ 사항을 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.
        * 1. next()둜 λ¬Έμžμ—΄ μž…λ ₯ 받은 ν›„ μ •μˆ˜, μ‹€μˆ˜, 논리값 μž…λ ₯ 받을 λ•Œ
        * 2. μ •μˆ˜, μ‹€μˆ˜, 논리값 μž…λ ₯ ν›„ next()둜 λ¬Έμžμ—΄ μž…λ ₯받을 λ•Œ
        * */
    
       /* μŠ€μΊλ„ˆ 객체 생성 */
       Scanner sc = new Scanner(System.in);
    
       /* 1. next()둜 λ¬Έμžμ—΄ μž…λ ₯ 받은 ν›„ μ •μˆ˜, μ‹€μˆ˜, 논리값 μž…λ ₯ 받을 λ•Œ  */
       System.out.print("λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
       String str1 = sc.next();				//κ³΅λ°±μ΄λ‚˜ κ°œν–‰λ¬Έμž μ „ κΉŒμ§€λ₯Ό μ½μ–΄μ˜¨λ‹€.
       System.out.println("str1 : " + str1);
    
       System.out.print("숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
       int num1 = sc.nextInt();				//μ •μˆ˜ 값을 μ½μ–΄μ˜¨λ‹€.
       System.out.println("num1 : " + num1);
    }
    • μ‹€ν–‰κ²°κ³Ό
      λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš” : **μ•ˆλ…•**
      str1 : μ•ˆλ…•
      숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : **123**
      num1 : 123
      
      λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš” : **μ•ˆλ…•ν•˜μ„Έμš” λ°˜κ°‘μŠ΅λ‹ˆλ‹€**
      str1 : μ•ˆλ…•ν•˜μ„Έμš”
      숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : Exception in thread "main" java.util.InputMismatchException
      	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
      	at java.base/java.util.Scanner.next(Scanner.java:1594)
      	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
      	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
      	at com.ohgiraffers.method.Application.main(Application.java:25)
    • μ—¬κΈ°κΉŒμ§€ μž‘μ„±ν•˜κ³  λ‚˜λ©΄ μ½”λ“œ μž‘μ„± μ‹œμ—(compile μ‹œ)λŠ” λ¬Έμ œλ˜μ§€ μ•ŠλŠ”λ‹€.
    • 처음 μ‹€ν–‰ν•  λ•Œ λ¬Έμžμ—΄μ— "μ•ˆλ…•" 이라고 μž…λ ₯ν•˜κ³  μ •μˆ˜λ₯Ό μž…λ ₯ν•˜λ©΄ μ •μƒμ μœΌλ‘œ λ™μž‘ν•œλ‹€.
    • ν•˜μ§€λ§Œ, "μ•ˆλ…•ν•˜μ„Έμš” λ°˜κ°‘μŠ΅λ‹ˆλ‹€" μž…λ ₯ ν•˜λ©΄ λ™μž‘ μ‹œ(Runtime) 숫자λ₯Ό μž…λ ₯ν•˜κΈ°λ„ 전에 InputMismatchException이 λ°œμƒν•œλ‹€.
    • ν•΄λ‹Ή Exception이 μ–Έμ œ λ°œμƒν–ˆμ„κΉŒ? μ •μˆ˜λ₯Ό μž…λ ₯ν•΄μ•Ό ν•˜λŠ”λ° 숫자λ₯Ό μž…λ ₯ν•˜μ§€ μ•Šμ€ κ²½μš°μ˜€λ‹€. 근데 아무것도 μž…λ ₯ μ•ˆν–ˆλŠ”λ° μ™œ λ°œμƒν–ˆμ„κΉŒ?
    • "μ•ˆλ…•ν•˜μ„Έμš” λ°˜κ°‘μŠ΅λ‹ˆλ‹€" ← μž…λ ₯ μ‹œ 곡백을 κΈ°μ€€μœΌλ‘œ 두 개의 토큰 "μ•ˆλ…•ν•˜μ„Έμš”"와 "λ°˜κ°‘μŠ΅λ‹ˆλ‹€" 둜 뢄리가 λœλ‹€.
    • next()λŠ” λ‹€μŒ 토큰인 "μ•ˆλ…•ν•˜μ„Έμš”"λ₯Ό μ½μ—ˆκ³ , nextInt()λŠ” λ‹€μŒ 토큰을 μ •μˆ˜λ‘œ 읽어야 ν•˜λŠ”λ° "λ°˜κ°‘μŠ΅λ‹ˆλ‹€"κ°€ λ‚˜μ™”λ‹€. μ •μˆ˜λ₯Ό μž…λ ₯ν•΄μ•Ό ν•˜λŠ”λ° "λ°˜κ°‘μŠ΅λ‹ˆλ‹€"λ₯Ό 읽으면 λ‹Ήμ—°νžˆ InputMismatchException이 λ°œμƒν•œλ‹€.
    • 곡백이 μžˆλŠ” λ¬Έμžμ—΄μ„ 받을거면 nextLine()을 μ΄μš©ν•˜μž.
    • ν˜Ήμ€ μž…λ ₯ 받은 버퍼λ₯Ό 쀄 λ‹¨μœ„λ‘œ 토큰을 λΆ„λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή 라인의 토큰을 λ‹€ 읽고 λ‹€μŒ μ€„λ‘œ μ΄λ™μ‹œν‚€κ³  싢을 λ•ŒλŠ” ν•œ 라인의 λͺ¨λ“  토큰을 μ½μ–΄μ˜€λŠ” sc.nextLine(); ν˜ΈμΆœμ„ 쀑간에 ν•œ 번 λ„£μ–΄μ€˜λ„ 해결은 λœλ‹€.
  • Scanner μ‚¬μš©μ‹œ μ£Όμ˜μ‚¬ν•­ ν…ŒμŠ€νŠΈ (2)
    public static void main(String[] args) {
    
        /* μŠ€μΊλ„ˆ 주의 사항 */
        /* μŠ€μΊλ„ˆμ˜ next λ©”μ†Œλ“œλ“€μ€ μž…λ ₯ν•œ λ‚΄μš©μ„ λ²„νΌλ‘œλΆ€ν„° ν† ν°λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•΄μ„œ μ½μ–΄μ˜¨λ‹€.
         * κ·Έλž˜μ„œ 크게 두 κ°€μ§€ 사항을 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.
         * 1. next()둜 λ¬Έμžμ—΄ μž…λ ₯ 받은 ν›„ μ •μˆ˜, μ‹€μˆ˜, 논리값 μž…λ ₯ 받을 λ•Œ
         * 2. μ •μˆ˜, μ‹€μˆ˜, 논리값 μž…λ ₯ ν›„ nextLine()둜 λ¬Έμžμ—΄ μž…λ ₯받을 λ•Œ
         * */
    
        /* μŠ€μΊλ„ˆ 객체 생성 */
        Scanner sc = new Scanner(System.in);
    
        /* 2. μ •μˆ˜, μ‹€μˆ˜, 논리값 μž…λ ₯ ν›„ nextLine()둜 λ¬Έμžμ—΄ μž…λ ₯받을 λ•Œ */
        System.out.print("λ‹€μ‹œ 숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
        int num2 = sc.nextInt();
        System.out.println("num2 : " + num2);
    
        System.out.print("곡백이 μžˆλŠ” λ¬Έμžμ—΄μ„ ν•˜λ‚˜ μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
    
        String str2 = sc.nextLine();
        System.out.println("str2 : " + str2);
    }
    • μ‹€ν–‰κ²°κ³Ό

      ```
      λ‹€μ‹œ 숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : **12**
      num2 : 12
      곡백이 μžˆλŠ” λ¬Έμžμ—΄μ„ ν•˜λ‚˜ μž…λ ₯ν•΄μ£Όμ„Έμš” : str2 :
      ```

      μ‹€ν–‰ 해보면 λ‘λ²ˆμ§Έ μž…λ ₯을 λ°›κΈ° 전에 λ°”λ‘œ λ‹€μŒ 쀄을 좜λ ₯해버린닀.

      μ•žμ—μ„œ 남긴 κ°œν–‰μ„ nextLine()이 읽고 λ„˜μ–΄κ°€μ„œ μž…λ ₯μ „ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλœλ‹€.

      ν•΄κ²°ν•˜λŠ” 방법은 κ°œν–‰μ„ 받아쀄 nextLine()을 ν•œ 쀄 더 λͺ…μ‹œν•΄μ€ŒμœΌλ‘œ 버퍼λ₯Ό λΉ„μš°λ©΄ λœλ‹€.

      public static void main(String[] args) {
      
          Scanner sc = new Scanner(System.in);
      
          System.out.print("λ‹€μ‹œ 숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
          int num2 = sc.nextInt();
          System.out.println("num2 : " + num2);
      
          System.out.print("곡백이 μžˆλŠ” λ¬Έμžμ—΄μ„ ν•˜λ‚˜ μž…λ ₯ν•΄μ£Όμ„Έμš” : ");
      
          sc.nextLine();         // 이 뢀뢄을 μΆ”κ°€ν•΄μ€€λ‹€.
      
          String str2 = sc.nextLine();
          System.out.println("str2 : " + str2);
      }
    • μ‹€ν–‰κ²°κ³Ό

      λ‹€μ‹œ 숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : **13**
      num2 : 13
      곡백이 μžˆλŠ” λ¬Έμžμ—΄μ„ ν•˜λ‚˜ μž…λ ₯ν•΄μ£Όμ„Έμš” : **ohgiraffers**
      str2 : ohgiraffers
profile
μ—”μ§€λ‹ˆμ–΄λ‘œμ˜ μ„±μž₯일지

0개의 λŒ“κΈ€