Cohe

09 Usage Modifier 본문

개발 언어/JAVA

09 Usage Modifier

코헤0121 2024. 3. 15. 17:24
728x90
  • Garbage Collecting
    • 객체 생성에 사용하는 new 키워드는 존재하지만 생성된 메모리에서 해제하는 키워드는 존재하지 않습니다
    • 없는 이유는 자바에서 JVM이 알아서 메모리를 관리하기 때문이다.
    • 객체가 더 이상 프로그램에서 사용되지 않으면 가비지 컬렉터가 스스로 판단하여 메모리를 해제하여 수거

  • Usage Modifier
    • Usage Modifier는 Access Modifier를 제외한 모든 Modifier를 의미함.
    • 여기 Usage Modifier(사용 제한자) 중 static, final, abstract를 볼 예정
    • 이외에 transient, synchronized, volatile, native 등이 있음.

static의 의미...

  • 일반적으로 각 인스턴스들은 서로 독립적으로 객체 내에서 변수값을 서로 각각 다룸.
  • Person p1, Person p2 가 있는 경우에 각각의 p1.getName(), p2.getName()는 다른 값을 가질 수 있음.
  • static이 변수 앞에 붙으면 모든 인스턴스에 대해서 공유가 됩니다. 이때 변수는 인스턴스 변수가 아닌 클래스 단위로 바뀌게 되고, 이 때문에 static이 붙은 멤버 변수를 클래스 변수라고 합니다.'
  • 그리고, static 붙지 않는 변수를 인스턴스 변수라고 하며 구분합니다.
  • 메서드 static이 붙는다면 해당 메서드는 인스턴스와 무관하기 때문에 인스턴스를 생성하지 않아도 호출이 가능하게 된다.

static 관련 된 자바 문법

  • static 메서드 안에서는 non-static 멤버를 객체 생성 없이 직접 참조할 수 없음. 반대로 static 붙지 않은 메서드에서는 static 멤버를 사용할 수 있음.
  • 주로 모든 인스턴스가 공통된 변수값을 가져야 하는 경우에 static 변수를 사용한다.
  • static 변수와 관련된 작업을 하거나 어떤 인스턴스 변수도 사용하지 않고 매개 변수로만 작업을 처리하는 메서드는 static 메서드로 정의해준다.
    • ex) math 클래스의 메서드
    • 이클립스 : 초록 동글뱅이는 public
      • s면 : static
  • Instance Initializer
    • 생성자가 호출되기전에 호출됨, 인스턴스 변수 초기화에 사용
    • 생성자를 이용하여 인스턴스 변수 초기화가 가능하기 때문에 사용할 기회는 많지 않음
    • final은 초기값이 굉장히 중요한데(후에 값 변경이 안되기 때문), 없으면 문제가 있다.
  • Static
    • 변수 메서드 static{}, 클래스에서 사용
    • static 제한자는 지정된 변수와 메서드를 인스턴스와 무관하게 만들어주기 때문에 this를 가질 수 없음
    • static 메서드는 non-static 메서드로 재정의 될 수 없다.

Uage Modifier - Final

  • 의미
    • 일반적으로 final은 그 값이 변하지 않음을 의미
    • 변수에 final이 붙으면 그 값은 변경 할 수 없다. 때문에 static하고 같이 사용시 상수로 사용
    • 메서드에 final이 붙으면 그 메소드는 재정의할 수 없다.
      • 재정의 필요가 없는 메서드일 때 사용
    • 개발자가 재정의를 허용하지 않기 위해서 사용한다.
    • 클래스에 final이 붙으면 그 클래스는 자식클래스를 가질 수 없다.
  • final
    1. 선언과 동시에 초기화
    2. 인스턴스 초기화 이용
    3. 생성자를 이용

  • 다형성
    • 여러가지 형태를 가지는 성질을 의미
    • 다형성은 상속을 전제조건으로 함
    • 동일한 메시지라도 어떤 객체에 전달되느냐에 따라서 다양한 동작을 발생하게 된다.
    • 다형성은 존재하지 않았던 클래스를 기존 시스템에 수정 없이 시스템에 추가되도록 합니다, 다형성 인자 예제 참
    • 다형성을 적용하는 방법은 부모 클래스의 객체를 선언하고 자식 클래스의 객체를 할당하는 것, 반대는 불가능함
    • 다형적 객체의 경우 부모 클래스에 있는 메서드만 사용이 가능
      • 자식 클래스에 재정의 되어 있다면 실행은 자식 클래스에 있는 메서드로 실행
      • 자식클래의 메서드가 실행된다고해서 부모 클래스에 있는 해당 메서드를 지우면 안됩니다 이유는 컴파일 시에는 부모의 메서드를, 실행시에는 자식의 메서드를 사용하기 때문!
    • 선언시 자료형은 반드시 구현된 클래스일 필요는 없다. 추상클래스나 인터페이스도 가능하고, 이런 특성을 이용하여 개발자는 인터페이스를 통해서 명세를 제공할 수 있습니다.
  • instanceof : 좌항의 객체와 우항의 클래스를 비교

Usage Modifier - abstract

  • 의미
    • abstract 제한자는 아직 구현되지 않았다는 의미를 가짐
    • abstract 제한자는 클래스 메서드에 사용합니다 변수에는 사용하지 않아요
      • 변수는 늘 변경이 되기 때문에 명세의 의미인 abstract를 사용하지 못한다.
  • 클래스에 사용하는 경우
    • 객체를 생성할 수 없습니다.
    • 다형성을 통해서 추상클래스의 자료형으로 가지는 객체를 생성할 수 있습니다.
      • 자식을 가질 수 있다.
      • 추상 클래스 자체로는 new 연산자를 쓸 수 없다! → 그래서 구체화 할 수 있다.
    • 추상 클래스가 됩니다.
    • 반드시 상속을 받아서 사용해야 합니다.
      • 인터페이스가 나오기 전에 이 친구들을 썼다.
  • 메서드에 사용하는 경우
    • 추상 메서드가 됩니다. 메서드의 구현 부분이 없음
  • 추상 메서드를 하나라도 포함하는 클래스는 추상 클래스가 되어야 합니다. 그러나 추상 클래스가 꼭 추상 메서드를 가져야 할 필요는 없습니다.

'개발 언어 > JAVA' 카테고리의 다른 글

11 Exception  (0) 2024.03.19
10 Interface 인터페이스  (1) 2024.03.18
08 상속, modify  (0) 2024.03.14
07 Class, Method, Package  (0) 2024.03.13
회원관리 시스템 작성  (0) 2024.03.12