Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Computer Language - OOP (2) 본문

Programming Language/Java

Computer Language - OOP (2)

알 수 없는 사용자 2023. 9. 15. 00:59

Method

 메소드는 객체의 행동, 연산을 지정하는 것이다.

public int getSum(int i, int j){
    int sum;
    sum = i + j;
    return sum;
}

메서드를 구분하는 것을 시그니처(Signiture)라고 하는데, 시그니처는 메서드 이름, 매개변수의 타입이 들어가 있는 리스트의 조합을 말하며, 둘이 전부 동일할 때 해당 메소드는 동일하다고 한다.

 

Method: Instance Member

 메소드에서도 인스턴스 필드 처럼 인스턴스 메소드라는 개념이 존재한다. 따라서 이는 instance를 통해서 접근할 수 있는 메소드이다.

public class Car{
    int gas;
    
    void setSpeed(int speed){
        ...
    }
}

위는 인스턴스 필드와 인스턴스 메소드의 예제이다. static이 없는 것을 볼 수 있다.

 

Method: Static Member

위와 반대되는 개념이며, static이 선언되는 것은 초기에 JVM에 의해 코드가 컴파일 되고 class 들이 올라가며, 이때 static member 들도 같이 올라가게 된다. 즉, Instance member와는 다르게 static member가 더 먼저 실행된다는 말이다. 따라서 static을 붙인다는 것은 해당 멤버들을 먼저 실행시킬 수 있다는 말이고, class와 같이 JVM에 올라가기 때문에 JVM에서 클래스를 통한 static member들에 대해 접근이 가능하다. (초기화가 없이도 이미 JVM에는 선언이 되어 있다고 이해했다)

public class Animal {
    static String name = "hello";

    static void isAnimal(){
        System.out.println("yes");
    }
}

 

Method: Access Modifier

클래스별, 패키지별로 쓸 수 있는 메소드나 클래스를 제한시키는 용도이다. private → default → protected --> public 순으로 제한이 엄격하다. class 별로, member 별로 사용하는 접근제한자도 다른데, 이는 실습을 해보면서 익히는게 가장 좋을거 같다. 밑은 자바 클래스, 필드, 메소드 별로 사용할 수 있는 접근 제한자를 나타낸다.

  Class Method Field
private X O O
protected X O O
default class O O O
public O O O

이를 통해 Encapsulation을 달성하고, getter, setter을 통해 다른 클래스에게 보여주거나 수정할 수 있는 필드들을 제공한다.

 

Inheritance

Inheritance은 OOP의 기본이다. 다른 클래스의 멤버들을 물려받는다고 생각하면 된다. 이 물려받은 기능들로 더 커스터마이징을 시켜 또 다른 형태의 클래스가 나오게 되며, 생산성과 코드 중복을 줄이면서 계층 구조를 가질 수 있게 된다. extends 키워드를 통해 상속받을 수 있다. 상속 받은 클래스를 Sub Class, 상위 클래스를 Super Class 라고 부르며 부모 자식 클래스라고도 부른다.

 

이제 이에 대한 Constructor가 어떻게 동작하는지 살펴보자.

Implicit Invocation

암묵적으로 호출하는 형태는 A, AB, ABC 클래스 각각이 서로를 상속하고 있는 관계이면서, default constructor들을 계속해서 호출하는 것이다. 만약에 상속은 하는데, constructor가 없으면 클래스마다 constructor를 추가해줘야 하는데, 모든 부모 class에 이 작업을 수행하기에는 너무 힘들다. 따라서 JVM은 constructor가 없는 클래스에 대해서는 default constructor를 생성해주기 때문에 Implicit Invocation이 가능하다.

Explicit Invocation

위와는 반대로 super의 키워드를 사용하여 부모 클래스의 생성자에 접근할 수 있다. 즉 클래스 내부에 명시적으로 super를 코드하는 것이기 때문에 explicit하다고 할 수 있다.

 

마지막 부분에 대한 코드들은 나중에 추가하겠다.

'Programming Language > Java' 카테고리의 다른 글

Computer Language - OOP (3)  (0) 2023.09.15
Computer Language - OOP (1)  (0) 2023.05.01
Computer Language - Reference Type  (0) 2023.05.01
Computer Language - Condition & Loop  (2) 2023.04.30
Computer Language - Basic Operators  (2) 2023.03.22
Comments