본문 바로가기
프로그래밍/Java

[Java][용어 정리] 생성자, 키워드, Object

by 공프 Gongp 2023. 6. 21.
반응형

모든 생성자의 앞에는 this() 또는 super()가 있어야 한다.

선언하지 않았다면 디폴트로 내부에서 this()가 붙는다.

this 키워드 / this() 메소드

this.(변수명) //(=키워드) 생성자에서 여러변수 초기화

this(); //생성자 호출

this(); 메소드를 사용하여 중복성제거

class A{
int a, b, c, d;
A(){
a=1;
b=2;
c=3;
d=4;
}
A(int aa){
this();
a = aa;
}
A(int aaa, int bbb){
this(a);
b = bbb;
}
}

super 키워드 / super() 메소드

super.(변수명) //(=키워드) 부모 클래스 내에 있는 메소드 호출

super(); //부모생성자 호출
class A{
void abc(){
System.out.println("A_abc()");
}
}
class B extends A{
void abc(){
System.out.println("B_abc()");
}
void bcd(){
super.abc();
}
}
public class Test{
public static void main(String[] args){
B b = new B();
b.bcd();
}
}

super가 붙어있어 부모클래스에 속해있는 abc메소드를 찾아감.

this.abc();나 abc(); 였다면 B클래스 내에 있는 abc()를 찾아감.


Object Class

자바의 모든 클래스들의 부모 클래스

 

java내의 모든 class들은 Object Method를 가진다.

Object class의 주요 method

자료형
메소드명
비고
string
toString()
Object 객체의 정보 패키지.클래스명 @해시코드
일반적으로 오버라이딩하여 사용
boolean
equals(Object obj)
입력 매개변수 obj 객체와 stack 메모리 값(번지) 비교
등가 비교 연산자 == 과 동일한 결과
int
hashCode()
객체의 hashCode() 값 리턴, Hashtable, HashMap 등의 동등 비교에 사용
위칫값을 기반으로 생성된 고유한 값.
void
wait()
wait(long timeout)
wait(long timeout, int nanos)
현재 스레드를 일시정지 상태로 전환
(waiting/timed-waiting)
보통 notify()또는 notifyAll()로 일시정지 해제
동기화 블록에서만 사용 가능
void
notify()
notify All()
wait()를 이용해 일시정지 상태의 1개의 스레드(notify())또는 전체 스레드(notify All())의 일시정지 해제
동기화 블록에서만 사용가능

Object Class override를 통해 변환하여

원하는 기능을 재정의하여 사용할 수 있다.

그러나

자바에서 제공하는 기본함수는 웬만하면 그대로 사용하는 것이 좋다.

필요한 기능이 있다면 그와 비슷한 기능을 제공하는 함수를 작성하여 사용하는 것이 좋다.


final

final 필드, final 지역변수

▶ 처음에 지정한 값을 바꿀 수 없다.

▶ 실행을 모두 마치고 새로 실행할 때까지 값은 변하지 않는다.

final 메소드, final 클래스

final 메소드
final 클래스
상속을 사용해도 Override 불가.
상속 불가

추상(Abstract)

추상클래스

- 추상메소드를 하나 이상 포함하는 클래스

추상클래스, 추상 메소드가 속해있는 클래스.

정의방법:

1. 클래스 앞에 abstract 키워드를 붙인다.

2. 내용이 비어있는 메소드를 선언한다. (구현없이 선언만)

특징:

객체를 직접 생성할 수 없다.

추상 메소드, 구현없이 선언만 해놓은 메소드 (껍데기 생성)

이 메소드는 꼭! 나중에 구현해야한다.


 
abstract class A{
abstract void abc();
}
class B extends A{
void abc(){ ...
}
}


인터페이스(Interface)

모든 필드가 public static final

모든 메소드가 public abstract (default method 제외)

default 메소드 public

자체적으로 객체 생성

인터페이스의 정의

​다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스

 

인터페이스의 특징

interface A{
public static final int a=3; //인터페이스 내의 모든 변수는 public static final
public abstract void abc();
}
interface B{
int b=3; //public static final
void bcd(); //public abstract
}

 

인터페이스의 상속(implements)

인터페이스 클래스를 상속받으려면 extends가 아닌 implements를 사용하여 상속받는다.

인터페이스 클래스를 상속받는 클래스에서 꼭! 선언했던 추상메소드를 구현해야한다.

*interface 쓸 때 public 붙이기

*이너클래스 = 내부클래스

디폴트 메소드를 사용하면 구현하지 않아도 된다.

(접근지정자 public 뒤에 default)

자식→부모 디폴트 메소드 호출

A.super.abc(); → (부모클래스의) default void abc(){ ... }

정적메소드를 사용하면 클래스의 정적메소드 처럼

객체를 생성하지않고 호출할 수 있다.

(인터페이스명).(정적 메소드명)

반응형