ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] μžλ°” νŒ¨ν‚€μ§€λž€?
    Android/Java 2021. 1. 19. 23:48
    λ°˜μ‘ν˜•
    • 이 글은 "μžλ°” 온라인 μŠ€ν„°λ”” λ‚΄μš©"을 κ³΅λΆ€ν•˜μ—¬ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    νŒ¨ν‚€μ§€λž€?

    • μžλ°”μ—μ„œμ˜ νŒ¨ν‚€μ§€λŠ” ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ“€μ„ ν•œ 곳에 λͺ¨μ•„λ‘λŠ” 곳을 μ˜λ―Έν•©λ‹ˆλ‹€.

    • νŒ¨ν‚€μ§€ λ³„λ‘œ μ›ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λͺ¨μ•„두기 λ•Œλ¬Έμ— νŒŒμΌμ„ 효율적으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

    • λ˜ν•œ, 클래슀 이름이 같더라도 λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ 클래슀라면 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    • νŒ¨ν‚€μ§€ λ‚΄λΆ€μ—λŠ” μ„œλΈŒ νŒ¨ν‚€μ§€λ„ μžˆμ„ 수 μžˆμ–΄μ„œ 점(.)을 ν†΅ν•΄μ„œ κ΅¬λΆ„ν•©λ‹ˆλ‹€.

    • ex) java.lang.String : java.lang νŒ¨ν‚€μ§€ λ‚΄λΆ€μ˜ String 클래슀

    package Human;
    
    public class Student {
        String name;
        int age;
    }

    package νŒ¨ν‚€μ§€λͺ…을 μž…λ ₯ν•˜μ—¬ μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.


    import

    • μ†ŒμŠ€μ½”λ“œ μž‘μ„± μ‹œ λ‹€λ₯Έ νŒ¨ν‚€μ§€ μ•ˆμ— λ“€μ–΄μžˆλŠ” 클래슀λ₯Ό μ‚¬μš© μ‹œμ— νŒ¨ν‚€μ§€ κ²½λ‘œκΉŒμ§€ μΆ”κ°€ν•˜μ—¬ 클래슀λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    • ν•˜μ§€λ§Œ, ν•˜λ‚˜μ˜ ν΄λž˜μŠ€κ°€ 이름이 길어지면 λΉ„νš¨μœ¨μ μ΄λ―€λ‘œ μžλ°”μ—μ„œ import ν‚€μ›Œλ“œλ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    • importλ¬Έ 역할은 μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ†ŒμŠ€μ½”λ“œμ— μ‚¬μš©λœ 클래슀의 νŒ¨ν‚€μ§€μ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ—¬ νŒ¨ν‚€μ§€ 경둜λ₯Ό μ œμ™Έν•˜κ³  클래슀 μ΄λ¦„λ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • λ³„λ„λ‘œ 자주 μ“°λŠ” νŒ¨ν‚€μ§€μΈ java.lang 같은 κ²½μš°λŠ” importλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ ν΄λž˜μŠ€λ“€μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    import Human.Student;
    
    public class Main {
        public static void main(String[] args) {
            Student student = new Student();
        }
    }

    ν•΄λ‹Ή 클래슀만 μ“°κ³  μ‹Άλ‹€λ©΄ import Human.클래슀λͺ… 처럼 μž‘μ„±ν•˜λ©΄ λ©λ‹ˆλ‹€. νŒ¨ν‚€μ§€ λ‚΄ λͺ¨λ“  클래슀λ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ import Human.* 을 μž…λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€.


    Classpath

    • 클래슀 νŒ¨μŠ€λž€ JVM이 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ν•  λ•Œ, 클래슀 νŒŒμΌμ„ μ°ΎκΈ° μœ„ν•œ 경둜λ₯Ό λœ»ν•˜κ²Œ λœλ‹€.

    • μ†ŒμŠ€μ½”λ“œλ₯Ό 컴파일 ν•˜λ©΄ 클래슀 파일(.class)이 μƒμ„±λ˜λŠ”λ° 이 클래슀 νŒŒμΌμ„ 싀행을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” νŒŒμΌμ— λŒ€ν•œ 경둜λ₯Ό μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.

    • 클래슀 패슀λ₯Ό μ„€μ •ν•˜κΈ° μœ„ν•œ 방법은 두 κ°€μ§€λ‘œ java runtime에 -classpath μ˜΅μ…˜μ„ μΆ”κ°€ν•˜κ±°λ‚˜ CLASSPATH ν™˜κ²½λ³€μˆ˜λ₯Ό μΆ”κ°€ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.


    -classpath μ˜΅μ…˜

    class Exam1{
        void print(){
            System.out.println("Exam1");
        }
    }
    
    class Exam2{
        void print(){
            System.out.println("Exam2");
        }
    }
    
    
    public class ClassPathEx {
        public static void main(String[] args) {
            Exam1 ex1 = new Exam1();
            Exam2 ex2 = new Exam2();
    
            ex1.print();
            ex2.print();
        }
    }

    λ‹€μŒ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  javac ClaaPathEx.java λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ μ»΄νŒŒμΌμ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

    μ»΄νŒŒμΌμ„ μ‹€ν–‰ν•˜λ©΄ 각 ν΄λž˜μŠ€λ§ˆλ‹€ 클래슀 파일(.class)을 μƒμ„±ν•˜κ²Œ λ©λ‹ˆλ‹€.

    이후 Exam1.class와 Exam2.class νŒŒμΌλ“€μ„ μƒˆλ‘œμš΄ 폴더(dir)λ₯Ό μƒμ„±ν•˜μ—¬ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

    ClassPathEx.class νŒŒμΌμ„ μ‹€ν–‰μ‹œν‚€κΈ° 되면 Exam1.class, Exam2.class νŒŒμΌμ„ 찾지 λͺ»ν•˜λŠ” 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
    이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ -classpath μ˜΅μ…˜μ„ μ΄μš©ν•˜μ—¬ 클래슀 파일이 μžˆλŠ” 경둜λ₯Ό μ§€μ •ν•˜λ©΄ java runtime이 μ§€μ •λœ κ²½λ‘œμ—μ„œ 클래슀 νŒŒμΌμ„ 찾게 λ©λ‹ˆλ‹€.

    • java -classpath ".:경둜" 클래슀파일λͺ…을 μž…λ ₯ν•˜λ©΄ 클래슀파일이 μžˆλŠ” 경둜λ₯Ό μ§€μ •ν•œ ν›„ μ‹€ν–‰ν•˜κ²Œ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ 좜λ ₯이 λ‚˜νƒ€λ‚˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • Unixκ³„μ—΄μ—μ„œλŠ” java -classpath ".:경둜" 클래슀파일λͺ…, μœˆλ„μš°μ—μ„œλŠ” java -classpath ".;경둜" 클래슀파일λͺ… μž…λ‹ˆλ‹€.

    CLASSPATH ν™˜κ²½λ³€μˆ˜

    • -classpath μ˜΅μ…˜μ„ 일일이 μ£ΌλŠ” 것은 번거둜운 μž‘μ—…μ΄λ―€λ‘œ ν™˜κ²½λ³€μˆ˜μ— μ €μž₯ν•˜μ—¬ 수고λ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

    • ν™˜κ²½λ³€μˆ˜λž€ μš΄μ˜μ²΄μ œμ— μ§€μ •ν•œ λ³€μˆ˜λ‘œ ν”„λ‘œμ„ΈμŠ€κ°€ 컴퓨터 λ™μž‘ν•˜λŠ” 방식에 영ν–₯을 μ£ΌλŠ” λ³€μˆ˜μž…λ‹ˆλ‹€.

    • ν™˜κ²½λ³€μˆ˜λ‘œ μ§€μ •ν•œ λ³€μˆ˜(CLASSPATH, PATH..) 듀을 μžλ°” 가상머신과 같은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ°Έμ‘°ν•˜μ—¬ λ™μž‘ν•©λ‹ˆλ‹€.

    macosμ—μ„œλŠ” ~/.bash_profile 파일이 지역적 μ‹œμŠ€ν…œ μ„€μ •κ³Ό κ΄€λ ¨λœ νŒŒμΌμž…λ‹ˆλ‹€. vi λͺ…λ Ήμ–΄λ‘œ ~/.bash_profile에 CLASSPATHλ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.

    Exam1.class, Exam2.classκ°€ λ‹€λ₯Έ κ²½λ‘œμ— μžˆμ–΄λ„ ν™˜κ²½λ³€μˆ˜λ₯Ό 톡해 μ›ν•˜λŠ” 좜λ ₯κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.


    μ ‘κ·Όμ§€μ‹œμž

    • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•μœΌλ‘œ μΊ‘μŠν™”λž‘ 정보 은닉이 μžˆμŠ΅λ‹ˆλ‹€.

    • 클래슀λ₯Ό μƒμ„±ν•˜μ—¬ μΊ‘μŠν™”λ₯Ό λ§Œμ‘±μ‹œν‚¨ ν›„ 객체에 λŒ€ν•œ ꡬ체적인 정보 λ…ΈμΆœ μ—¬λΆ€λŠ” μ ‘κ·Όμ§€μ‹œμžλ₯Ό μ΄μš©ν•˜μ—¬ κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • μ ‘κ·Όμ§€μ‹œμžλ₯Ό μ΄μš©ν•¨μœΌλ‘œμ¨ 정보 은닉을 λ§Œμ‘±μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

    • μ°Έμ‘°(https://madplay.github.io/post/java-access-modifier)

    λ°˜μ‘ν˜•
Designed by Tistory.