1. OOP란
- 객체지향프로그램
- 데이터를 객체로 취급하여 프로그램에 반영하고, 객체의 상호작용을 통해 프로그램이 동작하는 것.
- OOP의 4가지특징 ( 추상화, 캡슐화, 상속, 다형성 ) 이용해 코드 재사용을 증가시키고, 유지보수 감소
1.1 OOP의 4가지 특징
추상화(Abstraciton)
- 공통의 속성이나 기능을 묶어 이름 붙이는 것
- 객체지향적 관점에서 클래스를 정의하는 것
- 예를들어 객체 < 사자, 고양이, 강아지 > 의 공통점은 동물이고 이를 동물로 묶는 행위
캡슐화(encapsulation)
- 특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터와 기능을 하나로 묶는 것 (모듈화)
- 정보를 객체안에 포함시키고, 그 정보에 대한 직접 접근은 허용하지 않는 대신, 필요에 따라 확인할 수 있는 인터페이스를 외부에 공개함으로써 정보은닉 효과도 자연스럽게 따라옴.
상속(inherutance)
- 상위 개념의 특징을 하위 개념이 물려받는 것
- 하위클래스는 상위클래스의 역할을 대신할 수 있으면서 고유의 역할도 수행할수 있어야한다.
다형성(polymorphism)
- 오버라이딩 ( method 재정의 )
- 오버로딩 ( 매개변수의 개수, 리턴 타입과 같은 부분이 다름으로 여러개의 같은이름 메서드 정의 )
1.2 OOP의 5대 원칙 (SOLID)
SRP - 단일책임원칙(Single Responseibility principle)
- 클래스에 모든 기능을 다 넣지말고 목적과 취지에 맞게 속성과 method 구성함으로 관련된 책임만..
OCP - 개방폐쇄원칙(Open/Closed principle)
- 자신의 확장에는 열려있어야하고, 주변의 변화에 대해서는 닫혀있어야 한다.
LSP - 리스코프 치환 원칙(Liskov substitution principle)
- 하위클래스의 인스턴스는 상위클래스의 인스턴스 역할을 하는데 문제가 없어야한다.
ISP - 인터페이스 분리 원칙(interface Segregation principle)
DIP - 의존 역전 원칙(dependency inversion principle)
- 추상클래스 혹은 상위클래스는 구체적인 구현클래스 또는 하위클래스에 의존적이면 안된다.
- 예를들면 벤츠-> 스노우타이어 가 아니고, 벤츠->타이어 <- 스노우타이어, 일반타이어, 광폭타이어
2. 컴파일 과정
- 개발자가 .java파일을 생성한다.
- build를 한다.
- java compliler의 javac의 명령어를 통해 바이트코드(.class)를 생성
- class loader를 통해 jvm내로 로드
- 실행엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석되어(각 운영체제에 맞는 기계어)
Runtime Data Area에 배치
3. interface와 abstract class
외형적 차이점
- 인터페이스 -> 확장성 ( 생성자 가질수없어 객체화 x, 다중상속 o )
- 추상클래스 -> 추상화 ( 생성자 가질수있어 객체화 o, 필드o, 다중상속 x )
상용의 의도
- 인터페이스
paymentService => kbPaymentServiceImpl , lgPaymentServiceImpl
처음은 kb결제로 시작해서 LG결제등의 다른 결제 추가될 가능이 있다면 인퍼페이스를 사용하는게 적절하다.
협업을 위해.. A개발자가 kb결제 B개발자가 LG결제 가능
4. String vs StringBuilder vs StringBuffer
String
- 불변객체 , 변하지 않는 문자열을 저장할 때 적합
StringBuilder
- 가변객체, 비동기방식이기때문에 Single Thread 환경하에 사용. 처리속도 가장 빠름
StringBuffer
- 가변객체, 동기방식이기 때문에 멀티쓰레드로 접근할 때 사용.