CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /์ž๋ฐ” ๋ฒ”์œ„
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

์ž๋ฐ” ๋ฒ”์œ„

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๊ตญ๊ฐ€์— ๊ตญ๊ฒฝ๊ณผ ์ž์ฒด ๋ฒ•๋ฅ ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตญ๊ฐ€์˜ ๋ฒ•๋ฅ ์€ ๊ตญ๊ฒฝ ๋‚ด์—์„œ ์šด์˜๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตญ๊ฐ€์—๋Š” ์ž์ฒด ์ง€์—ญ ๊ทœ์น™์ด ์žˆ๋Š” ํ•™๊ต๋‚˜ ๋ฐ•๋ฌผ๊ด€๊ณผ ๊ฐ™์€ ์กฐ์ง์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ตญ๊ฐ€์˜ ๋ฒ•๋ฅ ์— ์œ„๋ฐฐ๋˜์ง€ ์•Š์ง€๋งŒ ์ง€์ •๋œ ์กฐ์ง์˜ ํ‹€ ๋‚ด์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํŠนํžˆ Java ์–ธ์–ด์—๋Š” "๋ฒ”์œ„"๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ๋˜๋Š” ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์€ ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์˜์—ญ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Java์—์„œ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ฒ”์œ„๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ์ด๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ Java ๋ฒ”์œ„

๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ์˜ ๋ฒ”์œ„๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์‚ฌ์‹ค ๋•Œ๋•Œ๋กœ ํ”„๋กœ๊ทธ๋žจ์€ ๋งค์šฐ ํฌ๊ณ  ํ•˜๋‚˜ ๋˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณ€์ˆ˜์˜ ์šฉ๋„๊ฐ€ ๋ช…ํ™•ํ•˜๋„๋ก ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„๋Š” ํŠนํžˆ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ์ฝ๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. Java ๋ฒ”์œ„๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ํŠน์ • ๋ณ€์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ:
  • ๋ฉ”์„œ๋“œ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์‹œ์ž‘๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ ๋๊นŒ์ง€(๋ฉ”์„œ๋“œ ๋ฒ”์œ„) ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ๋ธ”๋ก์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋ก์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ ์ธ์ˆ˜์ธ ๋ณ€์ˆ˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค/๊ฐœ์ฒด ๋ณ€์ˆ˜๋Š” ํฌํ•จ ๊ฐœ์ฒด์˜ ์ˆ˜๋ช… ๋™์•ˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์‹œ์„ฑ์€ ํŠน์ˆ˜ ์•ก์„ธ์Šค ์ˆ˜์ •์ž์— ์˜ํ•ด ๊ทœ์ œ๋ฉ๋‹ˆ๋‹ค.
  • ์ •์  ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ํ•ญ์ƒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์‹œ์„ฑ๋„ ์•ก์„ธ์Šค ํ•œ์ •์ž์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• ์ˆ˜์ค€ ๋ฒ”์œ„

์ธ์ˆ˜๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฉ”์„œ๋“œ์—์„œ ์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์‹œ์ž‘๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ ๋๊นŒ์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ฉ”์„œ๋“œ ๋ณ€์ˆ˜ ๋ฒ”์œ„์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

public class JScopeTest1 {


   public static void main(String[] args) {

       System.out.println(myMethod(5));
       System.out.println(myMethod(17));

   }
   public static int  myMethod(int arg) {
       int secondArg = 100; //local method variable
       return secondArg + arg;
   }
}
์—ฌ๊ธฐ์— ์ง€์—ญ ๋ณ€์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ธ์ˆ˜์ธ secondArg ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . myMethod ๋ฉ”์„œ๋“œ ์™ธ๋ถ€์—์„œ ๋˜๋Š” ์„ ์–ธ๋˜๊ธฐ ์ „์—๋Š” ์ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ์ธ์ˆ˜์ธ ๊ฒฝ์šฐ ์ด ๋ฉ”์„œ๋“œ์˜ ์ „์ฒด ๋ณธ๋ฌธ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—๋Š” myMethod์˜ arg์™€ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ์˜ args๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ธ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ์ˆ˜์ค€ ๋ฒ”์œ„

ํด๋ž˜์Šค ์ˆ˜์ค€ ๋ฒ”์œ„(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜) โ€” ํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ํ•œ์ •์ž(์˜ˆ: public ๋˜๋Š” private)์— ๋”ฐ๋ผ ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜๊ฐ€ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ผ๋ฉด ํŠน์ • ๊ฐœ์ฒด์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์ด ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๊ฐ€ ์žˆ๋Š” ํ•œ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด๊ฐ€ ์—†์œผ๋ฉด ๋ณ€์ˆ˜์˜ ๋ณต์‚ฌ๋ณธ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์ด๋‚˜ ํ›„์— ์„ ์–ธ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฐœ์ฒด์—๋Š” ๋‹ค๋ฅธ ๊ฐœ์ฒด์™€ ๋…๋ฆฝ์ ์ธ ์ž์ฒด ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ฉ”์„œ๋“œ์—์„œ ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์˜ˆ


public class Student {
   
//class level variables
   public String surname;
   String name;
   String secondName;
   private Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}
Surname , name , secondName ๋ฐ birthday ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๋ธ”๋ก ๋ฒ”์œ„

๋ณ€์ˆ˜๊ฐ€ ์ผ๋ถ€ ์ฝ”๋“œ ๋ธ”๋ก์—์„œ ์ •์˜/์„ ์–ธ๋˜๋ฉด ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋ก์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋Š” ์ •์˜๋œ ์ค‘๊ด„ํ˜ธ ์‚ฌ์ด์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์ž์ฃผ ๋ธ”๋ก ๋ฒ”์œ„๋Š” ๋ฃจํ”„ ๋ณ€์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. for ๋ฃจํ”„ ์กฐ๊ฑด ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฃจํ”„ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

public class JScopeTest2 {
   public static void main(String[] args) {
       for (int i = 0; i < 10; i++) {
           int sum = 0;
           sum = sum + i;
       }
      
       int sum = 1;
       System.out.println(sum);
   }
}
์ฒซ ๋ฒˆ์งธ ํ•ฉ๊ณ„์™€ i ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ๋ฃจํ”„ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋˜๋ฉฐ ์ด ๋ฃจํ”„ ์™ธ๋ถ€์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘ ๋ฒˆ์งธ ํ•ฉ๊ณ„๋Š” ๋ฃจํ”„ ์™ธ๋ถ€์—์„œ ์„ ์–ธ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด ํŠน์ • ๋ณ€์ˆ˜๊ฐ€ ์ธ์‡„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •์  ๋ณ€์ˆ˜

๋ณ€์ˆ˜๊ฐ€ ์ •์ (static ํ‚ค์›Œ๋“œ๋กœ ํ‘œ์‹œ๋จ)์œผ๋กœ ์„ ์–ธ๋˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ํ•œ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ JVM์€ ์ •์  ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

import java.util.Date;

public class Student {
   public static int today = 2022;
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

 
   public static void main(String[] args) {
       System.out.println(today);
   }

}
์ •์  today ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Student ํด๋ž˜์Šค ์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์— "2022"๊ฐ€ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ํ•œ์ •์ž

Java์—๋Š” ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” 4๊ฐœ์˜ ์•ก์„ธ์Šค ํ•œ์ •์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • private์€ ๊ฐ€์žฅ ์ œํ•œ์ ์ธ ํ•œ์ •์ž์ž…๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ๋ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์„ ์–ธ๋œ ํด๋ž˜์Šค๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ํŠน์ • ๋ฉ”์†Œ๋“œ๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด private์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Java์—์„œ ๋น„๊ณต๊ฐœ์ž…๋‹ˆ๋‹ค.

  • ์•ก์„ธ์Šค ํ•œ์ •์ž๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ ํ•œ์ •์ž๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ํ˜„์žฌ ํŒจํ‚ค์ง€์—์„œ๋งŒ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • protected ์ˆ˜์ •์ž๋Š” ํŒจํ‚ค์ง€ ์™ธ๋ถ€์˜ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๋Š” ํ•œ ํ˜„์žฌ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋งŒ ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • public ์€ ์ œํ•œ์ด ๊ฐ€์žฅ ์ ์€ ํ•œ์ •์ž์ž…๋‹ˆ๋‹ค. ์„ ์–ธ๋œ ํด๋ž˜์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ๋„ ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜์ •์ž๋Š” ์ •๋ง ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION