[JAVA 기초] 객체 지향의 특징
객체 지향의 대표적인 특징은
1. 캡슐화
2. 추상화
3. 다형성
4. 상속성
이 네 가지가 객체 지향 프로그래밍의 주요 특징이다.
두음법으로 상추 다캠(캡)으로 외웠던 기억이 있다.
1. 캡슐화
캡슐화는 객체의 상태와 동작을 묶어 외부에서 접근을 제한하는 것이다.
Java에서는 private나, public, protect 같은 접근 제한자가 있다.
public class Users {
private String userId;
private String password;
public Users(String userId, String password) {
this.userId = userId;
this.password = password;
}
public String getUserId() {
return this.userId;
}
public void setPassword(String password) {
this.password = password;
}
}
위의 예시 코드에서 Users 클래스 안에 userId, password를 private로 선언하여 직접 접근할 수 없게 하였다.
그 대신 getUserId() 메서드와 setPassword() 메서드로 값을 가져오거나 변경하게 할 수 있게 하였다.
캡슐화의 주요 목적은 정보 은닉이다. 객체의 내부 구현에 대한 세부 사항을 노출시키지 않아 객체의 보안성과 안전성을 높일 수 있다.
2. 추상화
추상화는 필요한 부분만 추출하여 모델링하는 것을 의미한다.
불필요한 부분은 제거하고 , 구체적으로 공통된 부분이나 공통된 특성들을 분리하여 객체 가장 중요한 부분에 중점을 둔다.
3. 다형성
다형성이란 같은 이름의 메서드나 연산자가 다른 기능을 수행하는 것을 의미한다. Java에서는 오버로딩이나 오버라이딩을 통해 다형성을 구현한다.
- 오버로딩 : 같은 이름의 메서드를 여러 개 정의하는 것
우리가 익숙하게 볼 수 있는 println() 같은 메서드도 오버로딩을 이용하여 여러 출력 형태를 구현하였다.
- 오버라이딩 : 상속 관계에서 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의 하는 것
public class Animal {
public void speak() {
System.out.println("동물이 소리를 낸다.");
}
}
public class Dog extends Animal {
@Override
public void speak() {
System.out.println("개 짖는 소리");
}
}
4. 상속성
상속은 이미 존재하는 클래스를 기반으로 속성이나 메서드를 물려받아 확장하여 사용하는 것을 의미한다.
Java에서는 extends를 사용하여 상속 관계를 설정한다.
public class Student extends Users {
private String studentID;
public Users(String userId, String password) {
super(userId, password);
this.studentID = studentID;
}
public String getStudentID() {
return studentID;
}
}
Student 클래스는 Users 클래스로부터 상속받았기 때문에 Student 클래스는 Users 클래스가 가진 속성과 메서드를 이어받아 사용할 수 있다.
상속을 사용하면 코드의 재사용성과 유지보수성을 높일 수 있다. 또한 클래스 간의 계층 구조를 만들어 코드를 더 쉽게 이해하고 관리할 수 있다.