객체 지향이란?
- 어떤 개념에 대한 자료형과 함수를 객체 형태로 함께 묶어서 관리 → 가능한 모든 물리적, 논리적 요소를 객체로 만드는 것!
- 각각의 객체는 메시지를 주고받고, 데이터 처리 가능 → 객체간의 독립성 → 중복된 코드 양 감소 → 유지보수 용이
- 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됨
- 특징 : 추상화, 캡슐화, 상속, 다형성
객체 지향의 특징 4가지
1. 캡슐화
- 외부에서 접근하지 못하도록 private으로 감싸서 값을 은닉하는 것
- 높은 응집도와 낮은 결합도를 유지하여 한 곳에 변화가 일어나도 다른 곳에 미치는 영향을 최소화
public class Animal{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
2. 추상화
- 공통적인 특성을 파악하여, 하나의 묶음으로 만들어내는 것 -> 객체의 공통적인 특징을 추출하여 정의하는 것
- 예시) 자동차 -> 아반테, 소나타, ... 등등
public interface Animal{
void eat();
void say();
}
public class Dog implements Animal{
@Override
public void eat(){
System.out.println("얌얌");
}
@Override
public void say(){
System.out.println("멍멍");
}
}
public class Cat implements Animal{
@Override
public void eat(){
System.out.println("얌얌");
}
@Override
public void say(){
System.out.println("냐옹");
}
}
3. 다형성
- 같은 이름의 메서드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현하는 것 -> 코드 중복 줄임
- ex) 오버라이딩, 오버로딩 -> 추상화 예시 참고!
4. 상속성
- 부모 클래스의 속성과 기능을 자식 클래스가 상속 받아 이용할 수 있음
- extends를 이용
- is-a 관계 -> 하위 객체 is a 상위 객체
public class Animal{
String name;
int age;
void eat(){
System.out.println("냠냠");
}
void say(){
System.out.println("멍멍");
}
}
public class Dog extends Animal{
void walk(){
System.out.println("산책");
}
}
public class Cat extends Animal{
// 메서드 재정의 -> 오버라이딩
@Override
void say(){
System.out.println("멍멍");
}
}
잘 읽었습니다. 좋은 정보 감사드립니다.