카테고리 없음

2023.08.15 TIL - CLASS

인생은야메다 2023. 8. 16. 00:19

Java는 객체 지향 프로그래밍 언어이다. 여기서 말하는 객체는 우리가 현실 세계에 존재하는 물체를 말한다. 물체들이 갖는 정보와 물체가 할 수 있는 행동을 모두 합치면 객체가 되는데, Java는 이를 프로그래밍 언어로 나타낸 것이다.

 

간단히 말하자면, 물체는 클래스, 물체가 갖는 정보들은 필드, 물체가 할 수 있는 행동은 메소드로 부르면 맞을 것이다. 또한 물체 간의 상호 작용은 행동, 즉 모두 메소드로 이루어진다. 

 

객체 지향 프로그래밍은 4가지 특징을 갖는다.

 

1. 캡슐화

- 캡슐화는 필드와 메소드를 하나로 묶어 클래스로 만든 후, 실제 구현 내용은 외부에서 알 수 없도록 감추는 것을 뜻한다. 외부 객체들은 내부 구조를 알 수 없기에, 노출되어 있는 메소드들을 통해야만 접근이 가능하다. 

- 필드와 메소드를 숨기는 이유는 외부 객체에서 이들을 잘못 사용할 경우 객체가 변질될 수 있기 때문에, 접근 제어자를 통해 노출할 정보와 감출 정보를 지정할 수 있다.

 

2. 상속

- 객체에는 부모, 자식 객체가 존재한다. 부모 객체는 본인이 가진 필드와 메소드를 자식 객체에게 물려줄 수 있는데, 이를 상속이라 부른다. 상속받은 자식 객체는 부모 객체의 필드와 메소드를 별다른 선언 없이 사용할 수 있다.

- 상속을 사용하는 이유는 상속 관계로 묶음으로써 구조 파악이 쉽고, 부모 객체에 있는 것을 수정하면 자식 객체에 자동으로 반영이 되기에 일관성 유지가 쉬우며 객체마다 선언할 필요 없이 상속받기에 코드의 재사용성이 올라간다.

 

3. 다형성

- 객체가 연산을 수행할 때 하나의 행위에 대해 각 객체별 특성에 따라 다른 형태로 구성되는 것이다. 동일한 부모 클래스를 상속받더라도 상속받은 메소드의 내용은 자식마다 다를 수 있다.

 

4. 추상화

- 객체에서 공통된 부분들을 모아 상위 개념으로 선언하는 것을 추상화라 한다. 객체마다 공통된 행동이 있다면, 이를 묶어 부모 클래스에 선언하고, 이를 상속받고 수정할 수 있는 형태를 말한다. 

 

this는 클래스 내에서 객체, 즉 인스턴스 자신을 표현하는 키워드이다. 매개변수명과 객체의 필드명이 동일할 때 이로 인한 혼동이 발생하지 않도록 매개변수와 필드명을 명시해 주는 역할을 한다. 또한 return 타입으로 this를 사용할 경우 자기 자신을 반환할 수 있다.

this()는 자신의 생성자를 호출하는 키워드이다. 클래스 생성 시 필요 매개변수가 다를 경우 매개 변수의 갯수만큼 모두 선언해 주어야 하지만, this()를 통해 중복되는 항목은 생략할 수 있다.

 

 

제어자는 클래스, 변수, 메서드의 선언부에 사용되어 추가적인 의미를 준다.

 

public: 접근 제한이 없다. 외부에서도 아무 조건 없이 사용할 수 있다.

protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다.

default: 같은 패키지 내에서만 접근이 가능하다.

private: 같은 클래스 내에서만 접근이 가능하다.

위 4가지 제어자를 통해 객체 지향 프로그래밍 특징 중 하나인 캡슐화를 실현할 수 있다. 보통은 필드값은 private로, 이들에 접근하는 메소드를 그 외 제어자(public 등)로 선언해서 필드 값을 읽고 쓸 수 있다.

그 외에도 static, final, abstract 등의 여러 제어자가 있다.