-
[Java] Package, ModifierProgramming 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