객체지향 프로그래밍(Object Oriented Programming, OOP)
객체지향 프로그래밍이란?
컴퓨터 프로그래밍 패러다임 중 하나로, 프로그램을 명령어의 목록으로 보는 시각에서 벗어나, 독립된 단위인 객체의 모임으로 파악하는 것이다.
각각의 객체는 메세지를 주고받고, 데이터를 처리한다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고,
그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법(객체 간의 협력을 구현)
객체지향 프로그래밍의 장점
- 코드의 재사용성이 용이하다.
- 유지보수가 쉽다.
- 대규모 프로젝트에 적합하다.
객체지향 프로그래밍의 단점
- 처리속도가 상대적으로 느리다.
- 객체가 많으면 용량이 커질 수 있다.
- 설계시 많은 시간과 노력이 필요하다.
객체지향의 기본 구성 요소
- 클래스(Class)
- 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
- 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인해야 함
- 객체(Object)
- 클래스의 인스턴스로, 실제로 메모리상에 할당된 것
- 자신 고유의 속성을 가지며, 클래스에 정의된 행위를 수행
- ex) 사람, 자동차, 주문, 생산, 관리
- 메소드(Method)
- 클래스로부터 생성된 객체를 사용하는 방법
- 메소드는 속성(변수)을 변화시키는 데에 사용한다.
- 정적 메소드는 정적 변수들을 변화시키고, 인스턴스 메소드는 객체의 속성을 변화시킨다.
- 꼭 속성을 변화시키는 것은 아니고, 주요 기능이 속성을 변화시키는 것이다.
객체지향의 특징
-
추상화(Abstraction)
- 객체지향에서 추상화란 객체에서 공통된 속성과 행위를 추출하는 것을 의미한다.
- 예를 들어, 자동차의 종류 중에 소나타, 아반떼, 그랜져, 제네시스 등이 있을 때
이것들을 자동차라는 클래스를 만들어 세부적인 기능들은 다 다르지만, 공통적인 속성과 행위에 대한 개념을 정의한 것이다.
- 객체를 클래스로 추상적인 개념으로 만드는 것 추상화, 클래스를 객체로 만드는 것이 인스턴스화라고 한다.
-
캡슐화(Encapsulation)
- 캡슐화는 연관 있는 변수와 메소드를 묶어주는 작업을 말한다.
- 접근 제어자(private)를 통해 외부로부터 접근을 제한하여 객체 내에서만 접근이 가능하도록 하며, 이를 정보은닉이라고 한다.
- 외부 클래스에서의 직접적인 접근으로 발생하는 변경이나 오류를 막음으로써 보안성이 높아진다.
-
상속(Inheritance)
- 현실에서 부모의 재산이나 특징들을 자식이 이어받는 상속의 개념을 프로그래밍적으로 적용한 개념으로,
부모 클래스의 속성과 기능을 이어받아 자식 클래스에서 사용할 수 있는 것을 말한다.
- 코드의 중복성을 줄여주는 역할을 한다.
-
다형성(Polymorphism)
- 한 타입의 참조 자료로 여러 타입의 객체를 참조할 수 있도록 하는 것으로, 동일한 변수, 함수명 등이 다양한 형태로 정의되는 것을 말한다.
- 오버 로딩(Overloading)과 오버 라이딩(Overriding)이라는 형태로 다양하게 기능들을 정의할 수 있다.
- 오버로딩 : 같은 이름의 메소드 여러 개를 가지면서 매개 변수의 자료형과 개수를 다르게 구현한 것이다.
class Anmimal{
String name;
int age;
public Animal(){
name = "홍길동";
age = 14;
}
public Animal(String name, int age){
this.name = name;
this.age = age;
}
}
- 오버라이딩 : 부모 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것을 말한다.
class Anmimal{
void move(){
System.out.println("동물이 이동합니다");
}
}
class Cat extends Anmimal{
@Override
void move(){
System.out.println("고양이가 이동합니다.");
}
}