mjeongriver
article thumbnail
Published 2022. 10. 13. 17:44
day16-java TIL/Java

* instanceof

- 자바의 키워드 중에서 instanceof 는 객체가 지정한 클래스의 인스턴스인지 아닌지 검사할 때 사용하는 연산자입니다.

- instanceof 연산자의 왼쪽 항의 객체가 오른쪽 항 클래스의 인스턴스 즉, 오른쪽 항의 객체가 생성되었다면 true를 리턴하 고, 그렇지 않으면 false를 리턴합니다

 

ex)

Person p = new Student();

p instanceof Student -> true

 

* 사용 제한자(Usage Level modifier) - static

 - static 제한자는 변수, 메서드에 적용되는 자바의 키워드입니다.

- static 메서드나 변수는 해당 클래스의 객체 없이도 참조할 수 있습니다.

- static 블록(static 메서드, 정적 초기화자) 안에는 static 변수만 사용해야하고, static 메서드만 호출할 수 있습니다. 즉 static 블록에서 non-static 멤버를 객체 생성 없이 직접 참조할 수 없습니다.

- static 제한자는 지정된 변수와 메서드를 객체와 무관하게 만들어주기 때문에 this를 가질 수 없습니다.

- static 메서드는 non-static 메서드로 재정의(Overriding) 될 수 없습니다.

- 대표적인 static 메서드는 애플리케이션의 main() 메서드입니다.

- static에 단순히 블록({ })을 사용한 경우에는 정적 초기화자라고 부르며, static 변수를 초기화하는 역할을 가지고 클래스가 로딩될 때 main() 메서드가 있더라도 그보다 앞서 딱 한 번 실행됩니다.

 

* 정적 변수(static field)

- static 변수는 모든 객체들이 공유하는 공유변수가 됩니다.

- 그리고 객체 생성 없이 클래스 이름만으로 참조가 가능합니다.

- 정적 변수는 객체를 만들어 참조할 수도 있지만, 객체를 만들지 않고 클래스 이름만 으로도 참조가 가능하기 때문에 이를 "클래스 변수"라고도 부릅니다.

 

* 정적 메서드(static method)

- static 메서드는 static 변수와 마찬가지로 해당 클래스의 객체 생성 없이도 참조가 가능하게 해줍니다.

- static 메서드에서 멤버를 참조할 때 주의해야 할 사항은 "static 메서드 안에서는 non-static 멤버를 객체 생성 없이 직접 참조할 수 없다"는 것입니다.

- static 메서드 안에서는 static 변수를 선언할 수 없습니다.

 

* 정적 초기화자(static initializer)

- 정적 초기화자는 static 변수들의 초기화에 사용합니다. 일반 멤버변수는 생성자에서 초기화하지만 static 변수는 객체 생성 없이도 사용해야하므로 생성자를 통해 초기화할 수 없습니다.

- 그래서 static 변수는 정적초기화자를 통해 초기화를 합니다.

- 정적 초기화자는 클래스가 로딩될 때 생성자와 main() 메서드에 앞서 오직 단 한번만 실행되기 때문에 애플리케이션 실행 중 반드시 한번만 실행되어야 할 로직이 있다면 이곳에 기술하여 사용될 수 있습니다.

 

* 자바에서 static이 갖는 의미 

- static멤버는 객체 생성 없이 클래스명.이름 으로 참조 가능하다 

- static변수는 객체간 값의 공유의 의미

- static메서드는 같은 static멤버만 참조가능하다. 클래스명.이름 으로 참조한다

 

ex) static메서드의 대표적인 사용

 

Math.random();

Arrays.toString(배열명);

Integer.parseInt(문자열)

 

* 싱글톤 패턴(Singleton Pattern)

- 싱글톤 패턴은 어떤 클래스의 객체는 오직 하나임을 보장하며, 이 객체에 접근할 수 있는 전역적인 접 촉점을 제공하는 패턴입니다.

- 클래스 객체를 유일하게 하나만 생성하여 모든 곳에서 하나의 객체에 접근하게 하여, 전역의 개념으로 객체를 사용할 수 있습니다.

- 싱글톤 패턴은 객체의 생성을 제한하기 위해 사용합니다. (자바를 이용한 프로그래밍에서 사용됨)

- getter메서드를 이용해서 객체를 반환한다 메서드의 반환하고 반환 타입을 확인할 것!

 

* final (변경 금지의 규제)

- final 키워드는 클래스, 메서드, 변수에 적용되며 abstract와 동시에 사용될 수 없습니다.

- final 클래스의 경우에는 상속이 안됩니다. 즉 서브클래스를 가질 수 없습니다.

- final 메서드는 재정의를 할 수 없습니다.

- final 변수는 값을 변경할 수 없습니다.

 

* final class

- 클래스 선언 시 final을 사용하면 그 클래스는 상속이 불가능해집니다.

- final 클래스는 자식 클래스를 가질 수 없고, 오직 외부에서 객체 생성을 통해서만 사용할 수 있습니다.

- final 클래스의 대표적인 예가 String 클래스입니다. 사용자가 임의로 String 클래스를 상속받아 메서드를 재정의하는 것 을 방지하기 위한 것입니다.

 

* final method

- final 메서드는 자식 클래스에서 부모 클래스의 메서드를 재정의하지 못하게 합니다.

- 하지만 클래스에 final이 붙지 않는다면 상속은 가능하므로 자식 클래스에서 final 메서드의 참조는 가능합니다.

- 자식 클래스에서 반드시 부모의 메서드를 기능의 변경없이 사용하도록 강요할 경우에 final 메서드를 선언합니다

 

= final 클래스는 상속 불가, fianl메서드는 오버라이딩 불가

 

* final 변수

- final 변수는 한번 값을 할당하면 그 값을 변경할 수 없습니다.

- final 변수는 선언시에 초기화하는 방법과 생성자를 통하여 초기화하는 방법이 있는데 만약 초기화하지 않고 남겨두면 컴파일 에러가 발생합니다.

- final필드는 직접 초기화, 또는 생성자로 초기화 해야합니다.

 

* 상수(static final)

- 자바에서는 불변의 값을 저장하는 필드를 상수(constant)라고 부릅니다.

- 상수는 객체마다 저장할 필요가 없는 공용성을 가져야 하며, 여러가지 값으로 초기화될 수 없기 때문에 static과 final 제한자를 동시에 붙여 선언합니다.

- 상수 이름은 모두 대문자로 작성하는 것이 관례입니다. 연결된 단어라면 (_)로 단어들을 연결해줍니다.

 

ex) public static final long VERSION = 1L;

 

* abstract

- abstract 키워드는 클래스와 메서드에 적용됩니다.

- 추상(abstract) 클래스는 실체 클래스들의 메서드들의 이름을 통일할 목적으로 사용합니다.

- 추상(abstract) 메서드가 있는 클래스는 반드시 추상 클래스여야 합니다.

- 그러나 추상 클래스에 반드시 추상 메서드만 선언할 필요는 없고 일반 메서드도 선언할 수 있습니다.

 

* 추상 클래스

- 추상 클래스는 new 키워드를 이용해서 객체를 만들지 못하고 오직 상속을 통해서 자식 클래스로 구체화 시켜야 합니다.

- 추상 클래스도 일반 클래스와 마찬가지로 멤버변수, 생성자, 메서드를 선언할 수 있습니다.

- new를 사용하여 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 때 super()를 호출하여 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 합니다.

 

* 추상 메서드

- 추상 메서드는 추상 클래스 내에서만 선언할 수 있습니다.

- 추상 메서드는 메서드의 선언부만 있고 메서드 실행 내용이 들어가는 중괄호 {}가 없는 메서드를 말합니다.

- 추상 클래스를 설계할 때 자식 클래스가 반드시 실행 내용을 채우도록 강요하고 싶은 메서드가 있을 경우, 해당 메서드를 추상 메서드로 선언합니다.

- 자식 클래스에서 반드시 부모 추상클래스의 추상 메서드를 재정의하여 실행 내용을 작성해야 합니다. 그렇지 않으면 컴파일 에러가 납니다.

 

* 자바에서 abstract의 의미

- 사용자 클래스를 정의할 때 굳이 abstract클래스로 설계할 필요는 없습니다. 하지만, 자바 내부의 많은 클래스는 abstract클래스로 정의 되어있음을 알아둬야 합니다.

또한, 자식 클래스로 생성해서 부모클래스(추상클래스)에 저장해서 사용가능하다는 점에 익숙해져야 합니다.

 

<오늘 푼 문제들>

 

static 개념 중요하니까 꼭꼭 제대로 숙지할 것!

'TIL > Java' 카테고리의 다른 글

day18-java  (0) 2022.10.17
day17-java  (0) 2022.10.14
day15-java  (0) 2022.10.12
day14-java  (2) 2022.10.11
day13-java  (0) 2022.10.07
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그