반응형

[광고 누르면 오늘의 행운 상승!!]

접근이나 사용을 제한한다.

접근 제한자 (Access Modifier)

★접근 지정자★
private 같은 클래스 내
defalut 같은 패키지 내
protected 자식들에게
public 누구든지.
생성자 앞에는 접근 제한자 하나 사용 가능

사용 제한자(Usage Modifier)

static

static을 사용하는 이유는 객체를 생성하지 않고 바로 부르기 위해서이다.

static은 메모리를 미리 할당하고 프로그램이 종료될 때까지 메모리가 해지되지 않는다.
그래서 static 메소드, 변수들을 직접 접근할 수 있으며 객체를 생성할 필요가 없다.
하지만 무분별한 static 사용은 메모리를 낭비하게 된다.

대부분의 객체지향 프로그래밍은 static을 사용하는 것을 최소화한다. 왜냐하면 시스템이
종료될 때까지 static에 올라간 메모리는 사라지지 않기 때문이다. (but 알고리즘은 그냥 쓰자.)

public static 일때만 전역으로 사용할 수 있다. 전역변수 위치에 int s; 라고 하면 heap에 할당되는
인스턴스 변수가 된다. static 메소드에서는 static변수와 메소드, 로컬 변수만 사용가능하다.
단, main class바깥에 class를 구현할 경우, (전역 개념, 별개!)

독립적인 class로 생각하기 때문에 static상관없이 사용 가능하다.

→ public default protected private
→ default 같은 패키지 내 접근 가능
→ 즉, 같은 패키지 내 다른 파일에 구현한 클래스와 취급이 동일하나, .class파일은 안생긴다!
class안에 class선언도 가능하다. (이건 중첩클래스로 static메소드안에서는 static붙여야 사용 가능)

final

final class - 클래스 상속 불가
final method - 메소드 오버라이딩 불가 // 재정의시 컴파일 에러
final 변수 - 변수 상수화 // 상속시 컴파일 에러
math 클래스를 final로 상속받지 못하게 하는 이유. 내용을 변경하지 않고 그대로 사용하게 하기 위함.

메소드에 final = 오버라이딩 하지말라 중요한 메소드다! 마! (보안, 성능) ↑
컴파일러가 메소드를 컴파일할때 오버라이딩 되어있는 메소드를 찾아다니기 때문에 성능이 떨어지는데
final로 막아놓으면 바로 찾아서 실행되기 떄문에 퍼포먼스가 높아진다.

math m = new math(); // math는 private이기때문에 객체를 생성할 수 없다. 그래서 static으로 사용해야한다.

abstract

abstract를 붙이는 이유 부모에 있는 메소드를 자식클래스에서 모두 오버라이딩
하여 사용하기 때문에 굳이 부모가 메소드를 구현할 필요가 없다. 그래서 abstract
메소드로 바꿔서 부모에서 메소드를 구현하지 않게 한다.

abstract 클래스는 new를 할 수 없다 (객체를 생성할 수 없다.) 하지만 배열객체로 만들면 만들 수 있다.
ex) Pet[] pet = new Pet[3]; //배열 객체가 생성되기 때문에.

abstract 클래스는 abstract 메소드가 반드시 필요한 것은 아니다.
하지만 abstract 메소드가 있으면 그 클래스는 반드시 abstract 클래스가 되야 한다.

abstract 클래스와 메소드가 생성되면 자식들은 반드시 부모의 abstract 메소드를 오버라이딩 하여야 한다.
객체를 생성하지 않고 자식들을 담아서 사용하는 용도로만 사용하고 싶을 때 abstract를 사용한다.
Person p = new Person() X Person p = new Teacher() O

반응형

'3. 자바 > 2. Class' 카테고리의 다른 글

중첩 클래스  (0) 2020.03.02
Overriding  (0) 2020.03.02
this, super  (0) 2020.03.02
생성자  (0) 2020.03.02
Interface  (0) 2020.03.02

+ Recent posts