본문 바로가기

Study/개발일지

[백엔드TIL] 객체지향 프로그래밍 (66일차)

객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?
먼저, 객체는 실제 세계에서 존재하는 사물이나 개념 등을 프로그래밍에서 표현한 것입니다.
객체 지향 프로그래밍은 데이터와 해당 데이터를 처리하는 메소드를 하나로 묶어서 객체를 만들고, 이러한 객체들이 서로 상호작용하면서 프로그램을 구성하는 것입니다. 객체 지향 프로그래밍은 코드의 재사용성과 유지보수성을 높이는 등 많은 장점을 가지고 있습니다. 객체지향 프로그래밍에서는 데이터와 이를 처리하는 메소드를 하나의 단위로 묶어서 클래스라는 개념으로 정의합니다. 
클래스는 객체를 생성하기 위한 객체가 가져야할 속성과 행위르 정의합니다. 객체지향 프로그램의 특징 중 하나는 상속입니다. 
상속은 부모 클래스의 특성을 물려받는 개념으로 이미 만들어진 클래스를 상속받아 사용할 수 있습니다.

▼ 오버로딩은 같은 함수라도 인수만 다르면 얼마든지 정의하고 사용할수 있습니다. 샘플에서 처럼 cal() 함수는 3가지 종류가 있습니다. 인수로 어떤값을 받아들이냐에 따라 기존에 같은 것이 없다면 계속해서 정의한후 사용이 가능한 것이죠.

 
public class Overriding {
 
 
 
public static void main(String[] args) {
 
Over ob = new Over();
 
ob.cal();
 
ob.cal(1,2);
 
ob.cal(3);
 
}
 
}
 
 
 
class Over{
 
public void cal(){
 
System.out.println("인수 없음");
 
}
 
public void cal(int a, int b){
 
System.out.println("인수 "+ a + "와 " + b);
 
}
 
public void cal(double d){
 
System.out.println("인수 " + d);
 
}
 
}

 

2. Overriding 오버라이딩

 

▼ 오버라이딩은 주로 클래스나 인터페이스를 상속받아서 부모 클래스에 있던 함수를 재정의 해서 사용하는 것입니다. 아래 3가지 예에서 2번째 A a2 = new B()  B 클래스를 A 클래스 데이터 타입으로 인스턴스화 했습니다. 두 클래스에 함수는 동일한데 A 를 상속받아서 구현한 B 에서 재정의한 것이죠. 그래서 A  cal() 함수를 실행하면 B  cal() 이 실행되는 것입니다.

 

 
class A{
 
public void cal(){
 
System.out.println("부모 A 의 cal() 함수실행");
 
}
 
}
 
 
 
class B extends A{
 
public void cal(){
 
System.out.println("자식 B 의 cal() 함수 실행");
 
}
 
}
 
 
 
public class Overriding {
 
 
 
public static void main(String[] args) {
 
 
 
A a1 = new A();
 
a1.cal();
 
 
 
A a2 = new B();
 
a2.cal();
 
 
 
B b = new B();
 
b.cal();
 
}
 
}
 
// 결과
 
부모 A 의 cal() 함수실행
 
자식 B 의 cal() 함수 실행
 
자식 B 의 cal() 함수 실행

 

▼ 주로 이렇게 하는 이유는 하나의 코드로 여러 객체를 처리할수 있기 때문입니다. 아래 샘플처럼 A 를 상속받은 클래스가 B, C 가 있고 cal() 함수를 재정의 했습니다. 객체를 List 에 담아 두었다가 for 문을 돌면서 한번에 cal() 기능을 수행하고 싶은데 객체마다 기능이 조금씩 다릅니다. 그럴때 상속받아서 재정의 한후 부모 클래스의 함수를 호출하면 객체별로 재정의한 함수를 수행할수 있는 것이죠.

 

 
import java.util.ArrayList;
 
import java.util.List;
 
 
 
class A{
 
public void cal(){
 
System.out.println("부모 A 의 cal() 함수실행");
 
}
 
}
 
 
 
class B extends A{
 
public void cal(){
 
System.out.println("자식 B 의 cal() 함수 실행");
 
}
 
}
 
 
 
class C extends A{
 
public void cal(){
 
System.out.println("자식 C 의 cal() 함수 실행");
 
}
 
}
 
 
 
public class Overriding {
 
 
 
public static void main(String[] args) {
 
 
 
List<A> list = new ArrayList<A>();
 
list.add(new A());
 
list.add(new B());
 
list.add(new C());
 
 
 
for (A a : list) {
 
a.cal();
 
}
 
}
 
}




728x90