공부 기록
[Java] Java와 객체 지향 프로그래밍 본문
들어가며
Java는 객체 지향 프로그래밍 언어이다.
여기서 객체 지향 프로그래밍(Object Oriented Programming)이란 부품을 조립하여 완성품을 만들듯이 객체를 먼저 만들고 이 객체들을 조립하여 완성된 프로그램을 만드는 기법이다.
객체 지향 프로그래밍의 특징으로는 추상화, 상속, 캡슐화, 다형성이 있다.
그동안 Java를 공부하며 객체 지향의 특징에 대해 제대로 공부한 적이 없었는데 오늘 이 4가지 특징을 정리하는 시간을 가졌다.
객체 지향 프로그래밍의 특징
추상화
추상의 사전적 의미는 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용을 말한다.(출처: 네이버 사전)
자바의 추상 클래스는 실체 클래스들의 공통적인 필드나 메서드를 추출해서 선언한 클래스로 실체 클래스의 부모 역할을 한다.
- 추상 클래스는 new 연산자를 사용하여 객체를 직접 생성할 수 없고, 실체 클래스의 부모 클래스로만 사용된다.
- 추상 메소드는 실행 내용을 가지지 않으며, 자식 클래스에서 재정의 하여 내용을 작성한다.
//추상 클래스
public abstract class Animal{
//추상 메소드
public abstract void sound();
}
public class Cat extends Animal{
//추상 메소드 재정의
@Override
public void sound(){
System.out.println("야옹");
}
}
상속
하위(자식) 객체가 상위(부모) 객체의 필드와 메서드를 물려받아 사용할 수 있다.
- 상속을 통해 중복된 부분을 없애 코드의 재사용성을 높인다.
- 부모 객체의 필드와 메서드를 수정하면 상속받은 모든 자식 객체들은 수정된 필드와 메서드를 사용할 수 있어 유지 보수 시간이 절약된다.
//부모 클래스
public class Animal{
//필드
public String type;
//메소드
public void eat(){
System.out.println("먹는다");
}
}
public class Bird extends Animal{
public void sound(){
System.out.println("짹짹");
}
}
public class Main{
public static void main(String[] args){
Bird bird = new Bird();
bird.eat(); //먹는다 --> 상속받은 메소드
bird.sound(); //짹짹
}
}
캡슐화
캡슐화란 객체의 필드와 메소드를 하나로 묶고 실제 구현 내용을 외부에 감추는 것을 말한다.
- 캡슐화된 객체는 필드와 메소드가 외부로 노출되지 않아 객체를 보호할 수 있다.
- 이때, 접근제한자를 이용하여 외부에 객체를 숨길지 노출시킬지 결정한다.
접근 제한자 | 제한 대상 | 제한 내용 |
public | 클래스, 필드, 생성자, 메소드 | 없음 |
protected | 필드, 생성자, 메소드 | 같은 패키지 혹은 자식 객체만 사용 가능 |
(default) | 클래스, 필드, 생성자, 메소드 | 같은 패키지 |
private | 필드, 생성자, 메소드 | 객체 내부 |
다형성
다형성은 사용방법은 동일하지만 실행 결과가 다양하게 나오는 성질로 자동 타입 변환과 메서드 오버라이딩을 통해 나타나는 특징이다.
- 자동 타입 변환 : 부모 타입의 변수에 자식 타입을 대입할 수 있다.
Animal animal = new Bird();
- 메소드 오버라이딩 : 상속된 메서드를 자식 클래스에서 재정의하는 것을 말하며, 메서드가 오버라이딩 되었다면 자식 메서드가 우선적으로 사용된다.
public class Animal{
public void sound(){
System.out.println("동물 소리");
}
}
public class Cat extends Animal{
@Override
public void sound(){
System.out.println("야옹");
}
}
public class Dog extends Animal{
@Override
public void sound(){
System.out.println("멍멍");
}
}
자식 클래스가 부모 클래스를 상속받고 동일 메소드를 오버라이딩하고 있다면 메서드 호출 시 결과는 다르게 나오는데 이를 다형성이라 할 수 있다.
Animal animal = new Animal();
Animal cat = new Cat();
Animal dog = new Dog();
animal.sound(); //동물 소리
cat.sound(); //야옹
dog.sound(); //멍멍
나가며
기본서에는 객체 지향의 4가지 특징을 나누어 정리하지 않고 클래스, 상속, 인터페이스라는 챕터에 각 내용이 녹아져 설명되어 있다.
각 특징에 알아야 할 자세한 내용들이 많지만 간단하게라도 적어보는 것이 내용을 정리하는데 도움이 많이 되었다.
부족한 내용들은 앞으로 공부해가며 조금씩 채워가야겠다.
참고자료
- 이것이 자바다 (신용권, 임경균 지음)
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 오버라이딩을 구현할 때, @Override를 꼭 써야할까? (0) | 2024.01.05 |
---|---|
[Java] 인터페이스(Interface) (0) | 2024.01.03 |