이거 공부하느라 시간을 얼마나 투자했는지 모르겠다.
다 이해한 게 맞는지도 의문인 게 문제ㅎㅎ..
SOLID에 대해서도 공부를 해보았는데 내용이 생각보다 커서 나중에 하나하나 따로 포스팅을 해야겠당.
틀린 부분이 있다면 지적해주시면 감사하겠습니다 : )
1. OOP(Object Oriented Programming, 객체지향 프로그래밍)이란?
컴퓨터 프로그래밍 패러다임 중 하나입니다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고,
그 객체들 간의 유기적인 상호작용을 통해 조직을 구성하는 프로그래밍 방법입니다.
2. OOP 장단점
1) 장점
코드 재사용이 용이합니다.
유지보수가 쉽습니다.
생산성이 향상됩니다.
2) 단점
처리 속도가 상대적으로 느립니다.
3. OOP 특징
1) 다형성 (Polymorphism)
자료형 체계의 성질을 나타내는 것으로,
프로그램 언어의 각 요소들(상수, 변수, 식, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킵니다.
자바에서의 대표적인 예로 오버로딩과 오버라이딩이 존재합니다.
다형성을 이용하면 코드의 재사용성이 높아지고, 유지보수가 쉬워진다는 장점이 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class Oop {
public static void test() {
System.out.println("Parameter X");
}
public static void test(int a) {
System.out.println("Parameter O");
}
public static void main(String[] args) {
test();
System.out.println("--------------------");
test(4);
}
}
|
위의 코드는 오버로딩입니다.
test라는 이름을 가진 메소드가 2개가 있는데 한 메소드는 받는 파라미터가 존재하지 않고,
다른 메소드는 int형의 파라미터를 받습니다.
해당 클래스 파일을 실행해보면 결과 값으로
이렇게 나오는 것을 확인할 수 있습니다!
2) 캡슐화 (Encapsulation, 은닉화)
객체의 속성(Data Fields)과 행위(Method)를 하나로 묶고,
실제 구현 내용 일부를 외부에 감추어 은닉합니다.
외부에 감추는 방법은 언어적 측면에서 접근 지정자를 두어 구현합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class Encapsulation {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
|
위의 코드는 캡슐화의 예제입니다!
name과 age라는 변수를 가지는 클래스 파일에 private이라는 접근 지정자를 두었습니다.
Spring 프레임워크를 이용하면 VO (Value Object) 모든 변수들에 private 접근 지정자를 두는 것을 많이 볼 수 있습니다.
이렇게 접근 지정자를 두어 값들의 손상을 막을 수 있습니다.
3) 추상화 (Abstraction)
복잡한 자료, 모듈, 시스템 등으로부터 공통적인 개념 또는 기능을 간추려 내는 것을 말합니다.
예를 들어, 카페에 가서 커피를 주문하는데 각 음료들이 가지고 있는 공통적인 특징은 음료의 이름이 있고, 가격이 정해져 있다는 것입니다.
또한, 공통되는 행위(기능 즉, 메소드)는 결제 후 알바생이 음료를 제조한다는 점이 있습니다.
4) 상속성 (Inheritance)
객체들 간의 관계를 구축하는 방법입니다.
클래스는 기반 클래스, 슈퍼 클래스, 또는 부모 클래스 등의 기존의 클래스로부터 속성과 동작을 상속받을 수 있습니다.
그 결과 생기는 클래스를 파생 클래스, 서브 클래스, 또는 자식 클래스라고 합니다.
또한, 상속을 통해 클래스들의 관계는 계층을 형성하게 됩니다. (ex.extends)
상속성을 이용하면 코드의 중복을 줄일 수 있다는 장점을 가집니다.
1
2
3
4
|
public class InheritanceSuperClass {
String name = "유찌";
int age = 23;
}
|
위의 코드는 Super Class입니다.
1
2
3
4
5
6
|
public class InheritanceSubclass extends InheritanceSuperClass {
public void test() {
System.out.println("name : " + name);
System.out.println("age : " + age);
}
}
|
위의 코드는 Sub Class입니다.
Sub Class에서 extends 키워드로 Super Class를 상속받습니다.
Sub Class에서는 name, age라는 변수를 선언하지 않았지만,
Super Class에서 선언을 하였고 상속을 받았기 때문에 해당 코드는 에러 없이 잘 실행이 됩니다.
SOLID에서도 간단하게 공부를 해보았는데 내용이 꽤나 길어져 나누어 포스팅하려고 합니다.
다음은 SRP 원칙에 대해서 포스팅해보려고 합니다.
신입이라 부족한 점이 많습니다.
틀린 내용이 있다면 지적해주시면 감사하겠습니다 : )