언어/java

객체지향

Eprld 2024. 2. 25. 13:19

public class Animal{ //클래스

Animal cat = new Alnimal();  //객체

}

 

클래스 - 객체를 만드는 기능을 함

객체 -  new 키워드를 이용해 클래스의 인스턴스인 객체를 만들어냄

인스턴스 - 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 떄 사용됨

 

클래스 변수(static 변수, 공유 변수)

- 인스턴스 변수가 인스턴스 마다 독립적인 저장공간을 지닌거와 달리 클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)를 공유한다

- 인스턴스를 생성하지 않고도 바로 사용할 수 있다.

- 클래스가 메모리에 로딩될 떄 생성되고, 프로그램이 종료될 때까지 유전된다.

- public을 앞에 붙이면 전역변수가 된다

 

인스턴스 변수

- 클래스의 인스턴스가 생성될 떄 만들어지기 때문에, 먼저 인스턴스를 생성해야 한다.

-독립적인 저장공간을 가지므로, 서로 다른 값을 가질 수 있다.

 

지역 변수 

- 선언된 블럭을 벗어나면 소멸되어 사용할 수 없다

 

메서드

선언

int add(int x, int y){

int result = x + y;

return result;

 

호출

add(4,6);

 

클래스 에서드와 인스턴스 메서드

 

클래스 메서드 

- 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는것에 static 을 붙인다.

-  클래스 변수(static)는 인스턴스를 생성하지 않아도 사용할 수 있다.

- 클래스 메서드는 인스턴스 변수를 사용할 수 없디. 클래스 멤버가 인스턴스 멤버를 참조/호출할 경우 별도의 인스턴스를 생성해야만 한다.

-  메서드 내에섯 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것이 메서드 호출시간이 짧아져 성능이 향상된다.

 

인스턴스 메서드

-인스턴스 변수와 관련된 작업을 하는 메서드 

 

오버로딩

 

정의 : 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것

장점 : 같은 기능을 하고, 다른 타입의 매개변수를 받는 메서드들을 같은 이름으로 지정할 수 있다.

조건 : 같은 이름을 가지고, 메게변수의 개수 또는 타입이 달라야 한다.

주의 :  가변인지를 선언한 메서드를 오버로딩하면, 오버로딩 된 메서드들을 구분하지 못하는 경우가 발생한다. 따라서 가변인지를 선언한 메서드는 오버로딩 하지 않도록 한다,.

 

생성자 

인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드(인스턴스 생성 아님)

 

매개변수 없는 Card(){}

매개변수 있는  Card(String K){} //매개변수 있는 생성자 인스턴스를 생성할 때 원하는 값으로 초기화 가능

 

변수 초기화 

인스턴스 초기화 블럭 -> 인스턴스가 생성될 때마다 초기화가 이루어진다.

클래스 초기화 블럭 -> 클래스가 처음 로딩될 떄 단 한 번 초기화 된다.

 

상속 

장점 : 코드의 추가 변경이 쉽고, 프로그램의 생산성과, 유지보수에 좋다.

특징

생성자와 초기화 블럭은 상속할 수 없고, 멤버만 성속 가능하다.

접근 제어자가 private, default 인 멤버의 상속은 가능하지만, 지속클래스로부터 접근은 제한된다.

단일 상속만을 허용

 

오버라이딩

조상 클래스로 부터 상속받은 메서드의 내용을 자식 클래스에 맞게 변경하는 것

조건

 

1. 선언타입(이름, 매개변수, 반환타입)이 같아야 한다.

2. 접근 제어자를 조상 클래스의 메서드 보다 좁은 범위로 변결할 수 없다

3. 조상 클래스보다 예외를 많이 선언할 수 없다.

4. 인스턴스 메서드와 static 메서드를 서로 변경할 수는 없다

 

오버 로딩 - 한 클래스에 같은 이름 여러개 정의

오버 라이딩 - 상속 받은 메서드의 내용 변경

 

super , super()

 

super 

- 부모 클래스로 부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수

- 인스턴스 변수의 이름과 지역 변수의 이름이 같을 경우 인스턴스 변수 앞에 this 키워드를 사용하여 구분할 수 있는 것과 마찬가지로 부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별할 수 있다.

- this 와 마찬가지로 인스턴스에는 사용가능 하지만, 클래스 메소드에는 사용할 수 없다,

 

super()

- this() 메소드가 같은 클래스의 다른 생성자를 호출할 때 사용된다면 super 메소는 부모 클래스의 생성자를 호출할 떄 사용 된다

- 자식 클래스의 인스턴스를 생성하면, 해당 인스턴스에는 자식 클래스의 고유 멤버뿐만 아니라 부모 클래스릐 모든 멤버까지도 포함되어있기 때문에, 부모 클래스의 멤버를 초기화 하기 위해서는 자식 클래스의 생성자에서 부모 클래스의 모든 멤버를 초기화 하기 위해서는 자식클래스의 생서자에서 부모 클래스의 생성자 까지 호출해야 한다, 따라서 자바 컴파일러는 부모 클래스의 생성자를 명시적으로 호출하지 않는 모든 자식 클래스의 생성자 첫 줄에 자동으로 다음과 같은 명령문을 추가하여, 부모 클래스의 멤버를 초기화할 수 있도록 해준다.

 

 접근 제어자 : public, protected, default, private

그 외 제어자 : static,final, abstract, native

 

public - 클래스 메서드 멤버변수 접근 가능(외부) 같은 클래스, 패키지, 자손 클래스, 전체(제어자에 따른 가능 범위)

protected - 메서드 멤버변수 접근 사능(외부) 같은 클래스, 같은 패키지, 자손 클래스(제어자에 따른 가능 범위)

(default) -  메서드 멤버변수 접근 사능(외부) 같은 클래스, 같은 패키지 (제어자에 따른 가능 범위)

private -  메서드 멤버변수 접근 사능(외부) 같은 클래스 (제어자에 따른 가능 범위)

 

static 

멤버변수 

-모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다

- 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다.

- 클래스가 메모리에 로드될 떄 생성된다

메서드

- 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.

- static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다,

 

final 

클래스

- 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다.

메서드 

- 변경될 수 없는 메서드, final 로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다,

멤버변수, 지역변수

- 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상숙 된다.

 

abstract

 

 

 

 

 

 

'언어 > java' 카테고리의 다른 글

Collection  (0) 2024.03.02
ArrayList  (0) 2024.02.25
Field(전역 지역 변수)  (0) 2024.02.24
240222  (0) 2024.02.22
과제  (0) 2024.02.19