JAVA(제어자, 패키지, import)

Hyeon_Su_Lee·2022년 1월 1일
0
post-custom-banner

요약

  • 제어자
  • 패키지
  • import


제어자

제어자(modifier)는 클래스, 변수, 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제자자와 그 외의 일반 제어자로 나눌 수 있다.

  • 제어자 : static, abstract, final
  • 접근제어자 : public, protected, default, private

제어자(modifier)

  • static(클래스의, 공통적인)
    static이 붙은 멤버변수와 메서드, 초기화 블럭은 인스턴스를 생성하지 않고도 사용할 수 있다.

    선언

    클래스명.클래스변수/메서드명()

    static을 사용하지 않은 메서드와 변수는 오류가 뜬다

    static을 써준 변수와 메서드는 인스턴스화를 하지 않아도 사용할 수 있다.

  • abstract(추상의, 미완성의)

    • 메서드의 선언부만 작성하고 실제 수행 내용은 구현하지 않는 추상메서드를 선언하는데 사용한다.

    • abstract는 클래스와 메서드를 대상으로 사용한다.
      - 클래스 : 클래스내에 추상메서드가 선언되어 있음을 의미한다.
      - 메서드 : 선언부만 작성하고 구현은 작성하지 않은 추상메서드임을 알린다.

      abstract class AbTest {
          abstract void Test();
      }
  • final(마지막의, 변경될 수 없는)
    • 거의 모든 대상에 사용가능
    • 변수에 사용사면 값을 변경할 수 없는 상수가 된다.
    • 메서드에 사용하면 오버라이딩을 할 수 없게 된다.
    • 클래스에 사용하면 자손 클래스를 정의하지 못한다.

      각각 표시한 부분들은 에러가 나오는 것을 볼 수 있다.

접근 제어자(Access modifier)

  • 멤버변수, 클래스, 메서드, 생성자에 사용할 수 있으며, 외부에서 접근 가능 여부를 컨트롤 하는 역할을 한다. 접근 제어자가 없는 경우 자동으로 default값이 된다.

    접근 제어자동일 클래스동일 패키지자식 클래스전체
    publicOOOO
    protectedOOOX
    default(기본)OOXX
    privateOXXX

  • AccessMod.java와 AccessModTest.java는 각각 다른 패키지에 있다.

  • AccessModTest.java 자바의 helloDEF변수는 default인데도 자손 클래스에 에러가 나오지 않는 것을 볼 수있다. 그 이유는 현재 동일한 패키지에 있기 때문에 그런 것이다.

  • AccessMod.java의 AccessMod클래스의 Hello변수들은 public을 제외하곤 전부 에러가 나온 것을 볼 수 있다.

  • AccessModTest의 자손 클래스인 AAccessMod의 helloPRO는 에러가 나오지 않은 것을 볼 수있다.

제어자의 조합

  • 사용 가능한 제어자
    • 클래스 : public, default, final, abstract
    • 메서드 : public, protected, default, private, final, abstract, static
    • 멤버변수 : public, protected, default, private, final, static
    • 지역변수 : final
  • 메서드에 static과 abstract를 함께 사용할 수 없다.
  • 클래스에 abstract와 final을 동시에 사용할 수 없다.
  • abstract메서드의 접근 제어자가 private일 수 없다.
  • 메서드에 private와 final을 같이 사용할 필요는 없다.


패키지

패키지란 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다.
클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다.

선언

  • 하나의 소스파일에는 주석과 공백을 제외한 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
  • 모든 클래스는 반드시 하나의 패키지에 속해야 한다.
  • 대소문자 모두 허용하지만, 클래스명과 구분하기 위하여 소문자로 한는 것이 원칙
  • 패키지는 점을 구분자로하여 계층구조로 구성할 수 있다.
  • 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.



import

원래 다른 패키지의 클래스를 사용하려면, 사용하고자 하는 클래스의 패키지 명까지 전부 포함시켜 선언해야 한다. 하지만, 클래스의 패키지를 import에 명시해주면, 클래스 선언시 패키지명을 생략할 수 있다.

실행시간엔 영향을 미치지 않고, 컴파일 시간에 조금 미침

선언

  • 일반적인 소스파일 구성
    1. package
    2. import
    3. class
  • import 패키지명.클래스명; or import 패키지명.*;
    • *의 경우 하위 패키지는 포함하지 않고 현재의 패키지만 전체 확인
    • 컴파일 시간의 차이가 좀있고 실행시간의 차이는 전혀 없음

정적 임포트(static import)

  • 일반 import를 사용해서 정적 메서드를 사용할 시 해당 클래스명을 같이 명시(ClassName.method())해주어야 했다.
  • 정적 메서드를 사용하면 클래스를 따로 명시하지 않아도 사용이 가능하다.
  • 정적 메서드가 아닌 메서드나, 해당 클래스를 인스턴스화 하려면 일반 임포트를 다시 지정 해줘야한다.
  • 특정 클래스의 static멤버'만' 자주 사용할 때 편리하다.

선언

  • import static 패키지명.클래스명.메서드명;
  • import static 패키지명.클래스명.*;



Java 1주차 종료!!

profile
어제 보다 오늘 더 발전하는 개발자
post-custom-banner

0개의 댓글