객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다.
객체
는 객체 지향 프로그래밍의 가장 기본적인 단위이자 시작점객체들 간의 상호작용
을 통해 발생한다는 것에서 출발class Phone {
//속성 정의
String user;
String company;
String model;
String color;
int battery;
//기능 정의
void startPhone() {
System.out.println("휴대폰이 켜집니다.");
}
void chargePhone() {
this.battery++;
}
void call(Phone phone) {
System.out.println(phone.user + "에게 전화를 겁니다.");
}
}
객체 지향 프로그래밍에서는 이와 같은 각각의 객체를 추상화시켜 속성(state)과 기능(behavior)으로 분류한 후 이것을 다시 각각 변수(variable)와 함수(function)로 정의하고 있다
클래스와 객체에 관한 글 👉 여기서 보기
객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출
해내는 작업
추상적인 개념에 의존하여 설계해야 유연함을 갖출 수 있다. 즉, 세부적인 사물들의 공통적인 특징
을 파악한 후, 하나의 묶음으로 만들어내는 것이 추상화
고양이, 강아지, 호랑이
👉 짖을 수 있음, 움직일 수 있음, 먹을 수 있음 (공통적 특징)
👉 동물임
public interface Animal {
void bark();
void move();
void eat();
}
자바에서 추상화를 구현할 수 있는 문법 요소로는 추상 클래스(abstract class)와 인터페이스(interface)
가 있다. 이 두 개념은 아래의 글에 (무려 1년 전) 정리해두었다!
👉 여기서 보기
기존의 클래스를 재활용
하여 새로운 클래스를 작성하는 자바의 문법 요소
추상화의 연장선에서, 상속은 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능을 간편하게 사용
할 수 있도록 한다
그래서 이게 왜 좋은데요?
고양이, 강아지 비교
공통 기능 : 짖기, 움직이기, 먹기 👉 이것들을 한 번만 작성해두면 여러 번 재활용 가능
고양이만 가진 기능 : 냥냥 펀치
강아지만 가진 기능 : 산책
자바에서의 상속을 정리한 글 👉 여기서 보기
어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태
를 가질 수 있는 성질을 의미
서로 다른 클래스의 객체가 같은 동작 수행을 명령을 받았을 때, 각자의 특성에 맞는 방식으로 동작
하는 것
public interface Animal {
void bark();
}
public class Dog implements Animal {
@Override
public void bark() {
System.out.println("멍멍");
}
}
public class Cat implements Animal {
@Override
public void bark() {
System.out.println("야옹");
}
}
OOP에서 다형성의 개념을 구현할 수 있는 방법은 오버라이딩(Overriding)과 오버로딩(Overloading)
이 있다.
오버라이딩과 오버로딩에 대해 정리한 글 👉 여기서 보기
다형성에 대해 정리한 글 👉 여기서 보기
클래스 안에 서로 연관 있는 속성과 기능들을 하나의 캡슐(capsule)
로 만들어 데이터를 외부로부터 보호하는 것
정보 은닉화를 통해 높은 응집도, 낮은 결합도
를 유지할 수 있도록 설계하는 것
왜 캡슐화를 하나요?
어떻게 캡슐화를 하나요?
public class Phone {
private String name;
private String number;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}