본문 바로가기
Java

[Advanced JAVA] Java keyword

by 루에 2014. 12. 24.
반응형

Modifier

abstract

내용은 없이 선언만 한다는 의미

final

선언한 값을 더이상 수정할 수 없음. 메소드에 사용할 경우 overide할 수 없는 상태가 됨. class에 사용하면 extends안됨

native

메소드 앞에만 가능. 이 메소드의 구현은 자바가 아닌 c로 되어있음

static

객체가 사용하는 필드가 아니라 class에서 사용하는 필드가 됨

synchronized

멀티 쓰레드 환경에서 동시 접근하는 것을 막음

transient

메모리에서만 값을 유지

volatile

멀티 쓰레드 환경에서 쓰임. 특정 상황에서 동시 접근할 때 값이 잘못되어 깨질 수 있는 문제를 해결. 캐쉬메모리를 통해 사용하지 않음

strictfp

java의 floating 연산은 하드웨어를 이용해 계산하는데, 컴퓨터 환경마다 값이 다를 수 있으므로 해당 modifier로 동일하게 만들어 줌



범위 제한자

private

같은 class에서만 사용

protected

같은 class 또는 상속 받은 class에서 사용 가능

public

모든 class에서 사용 가능

안 붙일 때

packaged. 동일한 package에서만 사용 가능. 상속을 받더라도 같은 패키지가 아닐 경우 사용 불가능



static Keyword

  • static은 변수, 메소드, 내부 클래스에 쓸 수 있다
  • static이 붙은 변수와 메서드는 객체에 속하지 않고 클래스에 속한다
  • static 변수나 메서드는 class attribute 또는 class method로서 class members라고 불린다
  • class가 로딩되는 시점에 초기화 됨
  • 한 곳에만 값이 존재하므로 모든 곳에서 같은 값을 가짐

final Keyword
  • 더 이상 삭속되지 않음
  • 오버라이딩 할 수 없다
  • 값이 변경되지 않는 상수
  • 오직 한 번 값을 할당 가능
  • 선언만 되어 있고, 초기화 되지 않은 final 변수를 blank variable이라 부름
이것은 반드시 모든 생성자에서 값이 할당 되어야 한다
메서드에서 사용 되기 전에 반드시 초기화 되어야 한다


단일 상속

자바는 멀티 상속을 지원하지 않는다. 클래스는 오직 하나의 클래스로부터 상속 받는다.



super Keyword

  • 상위 클래스의 객체를 가리킨다
  • super는 하위 클래스에서 상위클래스의 멤버 변수와 메서드에 접근할 때 사용된다
  • 바로 상위 클래스에 없을 경우 계층 구조를 따라 더 올라간다
  • super(...)와 같은 방법으로 접근한다.


다형성(polymorphism)

  • 다형성은 많은 다른 형태를 가질 수 있는 성질을 말함. 예를 들어 Manager 클래스는 Employee 클래스의 성질을 가진다
  • 하나의 객체는 오직 하나의 형태만을 가진다
  • 레퍼런스 변수는 다른 여러 형식의 객체를 가리킬 수 있다
arguments example
public Tax findTax(Employee e)
{
// 직원이 세율 계산
}

Manager m = new Manager();
...
Tax t = findTax(m);


Heterogeneous Collections

여러 가지 다른 형태의 객체들의 집합체


Employee [] staff = new Employee[100];

staff[0] = new Manager();

staff[1] = new Employee();

...


같은 형태의 집합체를 Homogeneous Collection이라고 함



Override Method

  • super에 정의 되어 있는 메서드를 sub에서 다시 정의하여 사용하는 것
  • method 앞에 @Override annotation을 붙임


Rules

리턴 타입은 반드시 오버라이딩 할 메서드와 일치해야 한다

접근지정자는 오버라이딩할 메서드보다 폐쇄적일 수 없다



virtual Method Invocation

Virtual Method

메서드의 구현 내용을 빼고 정의

가상 메서드가 있는 클래스는 virtual class로 정의해야 됨



Overloading Method

같은 이름의 메서드를 여러 타입의 인자로 여러 개의 메서드로 사용

public Sum(int a);

public Sum(float f);

public Sum(double d);

...



반응형

댓글