ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Package, Modifier
    Programming Lang/Java 2022. 9. 10. 02:45

    제어자란?

    package (패키지)
    related group of things when they are offered together as a single unit
    단일 단위로 함께 제공될 때 관련된 사물 그룹
    modifier (수식어, 제어자)
    a word or phrase that is used with another word or phrase to limit or add to its meaning
    그 의미를 제한하거나 더하기 위해 다른 단어나 구와 함께 사용되는 단어나 구

     

    패키지

    package com.practice;

    소스의 가장 첫 줄에 있어야만 한다.

    파일 하나에 반드시 하나만 존재해야 한다.

    파일이 위치한 폴더명과 같아야 한다.

    예약어를 사용할 수 없다.

     

    import

    import java.util.*; // * 은 모두(all)를 의미한다.
    import static org.assertj.core.api.Assertions.*; // static 변수나 메소드를 호출할 수도 있다.

    패키지 아래에 적어준다.

    여러 개를 사용할 수 있다.

     

    접근 제어자

    • public :  누구나 접근 가능
    • protected :  같은 패키지 내에 있거나 상속받은 경우 접근 가능
    • default (= package-private) :  같은 패키지 내에 있을 때만 접근 가능. 아무것도 적어주지 않으면 default.
    • private 해당 클래스 내에서만 접근 가능

     

    그 외의 자주 사용하는 것들

    • static
    • final
    • abstract
    • synchronized
    • transient

     

     

    Q. 여러 개는 사용할 수 없는 건가?

    A. 그렇지 않다.

     

    접근제어자를 제외한 나머지는 조합하여 사용할 수 있고 순서 또한 상관이 없다.

    static final double PIE1 = 3.14;
    final static double PIE2 = 3.14;

     

    그 밖의 것들

    native, volatile, strictfp ……

     

     

    static (클래스의, 공통적인)

    static 멤버변수

    • 공통적으로 사용되는 클래스 변수
    • 인스턴스 생성하지 않고 사용 가능
    • 클래스가 메모리에 로드될 때 생성

     

    static 메서드

    • 인스턴스 생성하지 않고 호출 가능
    • static 내에서는 인스턴스 멤버 직접 사용 불가능

     

    static 이 사용될 수 있는 곳

    • 멤버변수
    • 메서드
    • 초기화블럭
    class Main {
        public static void main(String[] args) {
            /** new 연산자를 사용하지 않고 메소드를 호출하려고 했을 때 */
            //MySum.add(num1, num2); // Non-static method 'add()' cannot be referenced from a static context
            MySum.addStatic();
    
            /** new 연산자를 사용해서 객체 생성 후, 메소드를 호출하려고 했을 때 */
            MySum ms = new MySum();
            ms.add();
            ms.addStatic();
        }
    }
    class MySum{
        void add() {  }
        static void addStatic() {  }
    }

    static 은 객체 생성 없이 사용하기 위한 목적으로 쓴다.

    객체를 생성하기 위해서는 생성자가 필요하고, 생성자는 new 연산자에 의해 호출된다.

    ststic 으로 선언 된 addStatic() 은 객체 생성 없이 사용할 수 있는 것을 확인할 수 있다.

     

     

    final (마지막의, 변경될 수 없는)

    final 클래스

    • 변경 및 확장 불가능한 클래스
    • 상속 불가능

     

    final 메서드

    • 변경 불가능한 메서드
    • 오버라이딩 불가능

     

    final 멤버변수, final 지역변수

    • 변경 불가능한 상수

     

    final 이 사용될 수 있는 곳

    • 클래스
    • 메서드
    • 멤버변수
    • 지역변수
    // String class
    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
        		.
    		.

    final 이 붙는 변수는 상수라고 부른다.

    고정 값을 쓰기 위함이며, 위와 같이 String 을 상속 받을 수 없도록 막아둔 것을 확인할 수 있다.

     

     

    abstract (추상적인)

    abstract 클래스

    • 추상 메서드를 포함하고 있다. (선언부 o, 구현부 x)
    • 일반클래스와 똑같이 생성자, 멤버변수, 메서드를 가질 수 있다. (선언부 o, 구현부 o)
    • 추상클래스는 반드시 일반클래스에서 상속받아 구현해주어야 한다.

     

    abstract 메서드

    • 선언부만 존재하고, 구현부는 없다.

     

    abstract 이 사용될 수 있는 곳

    • 클래스
    • 메서드

     

     

    synchronized (동기화 된)

    synchronized 메서드

    • 메서드 전체가 임계영역으로 설정된다.
    • 한 쓰레드가 작업이 끝나기 전까지 다른 쓰레드의 방해를 받지 않도록 lock을 건다.

     

    synchronized 가 사용될 수 있는 곳

    • 참조변수
    • 메서드

     

     

    더보기

    참고자료 : 자바의 정석, 자바의 신
    (+개인 생각)

    'Programming Lang > Java' 카테고리의 다른 글

    [Java] Polymorphism (작성중입니다)  (0) 2022.09.11
    [Java] Inheritance, Overriding  (0) 2022.09.09
    [Java] Class, Instance, Constructor  (0) 2022.09.07
    [Java] Variable, Method, JVM  (0) 2022.09.05
    [Java] String Array  (0) 2022.08.28
Designed by Tistory.