지난 기업 협업 기술 세미나에서 발표를 진행했지만, 제대로 정리를 하지 못해 이번에 정리해보고자 한다.
컴퓨터 프로그래밍 패러다임 중 하나로,
현실 세계를 프로그램 설계에 반영한다는 개념을 기반으로 함
프로그래밍에서 필요한 데이터를 추상화시켜 행위(Method)와 상태(Attribute)를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
클래스(메서드 + 속성), 인스턴스(객체), 추상화, 캡슐화, 상속, 다형성
클래스 : 문제 해결을 위해 필요한 데이터를 추상화하여 행위, 상태를 정의한 것
인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리 상 할당한 것으로 실제 데이터
즉, 클래스는 일종의 설계도를 말하고, 클래스를 사용해 실제 생성한 물건이 객체!
불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것
특정 문제를 해결하기 위한 기능과 특성을 '클래스'라는 '캡슐'에 분류해서 넣는 것
캡슐화 함으로써 클래스를 사용하는 쪽에서는 내부 로직을 굳이 파악할 필요가 없어짐
또한, 클래스 내의 변수나 메서드를 원하는 대로 감출 수 있기 때문에 보안도 함께 챙길 수 있음(정보 은닉)
class Person {
public String name;
private int age;
protected String address;
public Person (String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
}
상위 클래스의 속성과 기능을 물려받아 사용할 수 있게하고 자식클래스는 물려받은 기능 중에서 고치고 싶은 부분을 수정하여 사용할 수 있음
하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석될 수 있는 것으로, 오버라이딩, 오버로딩이 가능
public class Animal {
Animal(){}
public void bark() {
System.out.println("동물은 어떻게 울까?");
}
}
public class Cat extends Animal {
Cat(){}
@Override
public void bark() {
System.out.println("야옹야옹");
}
}
public class Dog extends Animal{
Dog(){}
@Override
public void bark() {
System.out.println("멍멍");
}
}
public class Tiger extends Animals{
Tiger(){
}
@Override
public void bark() {
System.out.println("어흥어흥");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Cat cat = new Cat();
Dog dog = new Dog();
Tiger tiger = new Tiger();
animal.bark();
cat.bark();
dog.bark();
tiger.bark();
}
}
public class Student {
int id;
int age;
String name;
Student(int id,int age,String name){
this.id =id;
this.age =age;
this.name =name;
}
public void Whoiam(String name) {
System.out.println(name);
}
public void Whoiam(int age) {
System.out.println(age);
}
}
### 객체 지향의 장단점
#### 장점
- 코드 재사용이 용이
- 기존의 클래스를 가져와서 상속을 통해 확장 사용이 가능
- 유지보수가 쉬움
- 수정해야할 부분이 클래스 내부의 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정
- 대형프로젝트에 적합
- 클래스 단위로 모듈화시켜 개발하기 때문에 업무 분담이 쉬움
#### 단점
- 처리 속도가 상대적으로 느림
- 객체가 많으면 용량이 커질 수 있음
- 설계시 많은 시간과 노력이 필요