야미의 개발

[JAVA]자바와 객체지향(3) - 자바가 확장한 객체지향 본문

JAVA

[JAVA]자바와 객체지향(3) - 자바가 확장한 객체지향

채야미 2024. 2. 27. 17:25

이 도서를 기반으로 글을 작성하였습니다.

 

자바의 객체지향을 확장시켜주는 키워드들와 개념들을 살펴보겠습니다.

 

1. abstract 키워드

추상(abstract) 메소드란?

선언부는 있지만 구현부가 없는 메소드

 

왜 필요할까?

동물 클래스의 인스턴스를 만들어서 (추상적인 개념) 울어보세요와 같은 메소드를 실행 시킬수 없음

-> 이럴때 추상 매서드를 사용해 울어보세요 메소드를 abstract로 선언!

 

+추상메서드가 있는 클래스를 상속받은 클래스는 강제적으로 implements, 즉 구현해야한다!

 

 

 

2. 생성자

클래스의 인스턴스, 즉 객체를 만들때는 new 키워드를 사용한다.

이때 클래스명() 또한

반환값이 없고, 클래스명과 같은 객체를 생성하는 메서드 

-> 객체 생성자 메서드 라 한다

 

public 클래스명() {}

이 바로 생성자의 기본 생성자 메소드

자바에서는 인자가 있는 생성자를 만들면 기본 생성자를 만들지 않음 주의!!

 

 

 

 

3. 클래스 생성 시의 실행 블록, static 블록

static 블록이란 클래스가 스태틱 영역에 배치될 때 실행되는 코드 블록이다.

 

public class 동물{
	static{
    	System.out.println("동물 클래스 레디 온!");
    }
}

 

 

클래스는 코드상에서 클래스가 사용될 때 static영역에 배치된다. 따라서

 사용하지 않은 클래스의 static 블록은 실행될수 없다

이때 클래스가 사용될 때는

1. 클래스의 정적 속성을 사용할 때

2. 클래스의 정적 메소드를 사용할 때

3. 클래스의 인스턴스를 최초로 만들 때 이다.

 

또한 static 블록에서 사용될 수 있는 속성과 메소드는 static 멤버 뿐!

-> 객체 멤버에 접근할 수 없기 때문 // 객체 멤버는 클래스가 static 영역에 자리잡은 후 객체 생성을 한 후에 힙에 생성되기때문에

+ 여러번 객체(인스턴스)를 만들어도 한번만 실행됨

 

 

 

4. fianal 키워드

자바에서의 final은 오직 한번만 정의, 할당 할수 있는 키워드이다.

클래스, 메서드, 변수에 사용 가능하다.

 

  • 클래스에 붙는 경우
    상속 불가능
  • 변수에 붙는 경우
    변경 불가능한 상수가 됨!  - static final로 사용
    초기화를 해주지 않았다면 1번만 초기화 가능
  • 메서드에 붙는 경우
    재정의, 즉 오버라이딩을 금지

 

 

 

5. instanceof 연산자

만들어진 객체가 특정 클래스의 인스턴스인지 확인하는 키워드

Boolean 타입 반환

참조변수의 타입이 아닌 실제 만들어진 객체의 타입으로 확인!

 

 

 

6. package 키워드

네임스페이스를 만들어주는 역할

네임스페이스란?

네임스페이스는 내부 식별자(형식, 함수, 변수 등의 이름)에 범위를 제공하는 선언적 영역입니다. 네임스페이스는 코드를 논리 그룹으로 구성하고 특히 코드베이스에 여러 라이브러리가 포함된 경우 발생할 수 있는 이름 충돌을 방지하는 데 사용됩니다.

 

여러개의 클래스들을 구분가능하게 해주는 것 

 

 

 

7. interface 키워드와 implements 키워드

interface는 추상메서드와 public 정적 상수만 가질 수 있음

접근제어자 interface 인터페이스이름 {

    public static final 타입 상수이름 = 값;

    ...

    public abstract 메소드이름(매개변수목록);

    ...

}

 

위가 기본형이지만 static final과 abstract 들을 생략가능함 -> but 명확하게 표기하는 것이 더 좋을 수 있음

 

 

 

8. this 키워드

this 참조 변수는 인스턴스가 바로 자기 자신을 참조하는 데 사용하는 변수

이러한 this 참조 변수는 해당 인스턴스의 주소를 가리킨다.

class Car {

    private String modelName;
    private int modelYear;
    private String color;
    private int maxSpeed;
    private int currentSpeed;

    Car(String modelName, int modelYear, String color, int maxSpeed) {

        this.modelName = modelName;
        this.modelYear = modelYear;
        this.color = color;
        this.maxSpeed = maxSpeed;
        this.currentSpeed = 0;

    }
}

 

위와같은 Car 클래스 안에서

변수의 우선권은 지역변수가 있으므로 this를 붙여 

클래스 내 변수의 값게 메소드의 인자 변수할당

 

아래의 점들을 유의하자.

  • 지역변수와 속성(객체 변수, 정적 변수)의 이름이 같은 경우 지역변수가 우선
  • 객체 변수와 이름이 같은 지역 변수가 있는 경우 객체 변수를 사용하려면 this를 접두사로 사용한다.
  • 정적 변수와 이름이 같은 지역 변수가 있는 경우 정적 변수를 사용하려면 클래스명을 접두사로 사용한다.

 

 

9. super 키워드

상위 클래스의 인스턴스를 지칭하는 키워드

바로 상위 클래스 인스턴스까지 접근 가능

 

 

Comments