[Spring Boot] OOP에 대하여
객체 지향 프로그래밍
Bus b= new Bus(); --> Bus 인스턴스를 Heap 메모리에 올라간다
Bus : 레퍼런스 타입
b : 참조변수 레퍼런스
Bus() : 생성자
객체지향 : 메모리에 올라가 있는 인스턴스를 객체라고 한다. 어떤 객체는 1개만 필요한 것도 있고, 여러개가 필요할 수 있다.
- 초보자 : 객체가 아니라 클래스에 대해 집중한다.
라이브러리 vs 프레임워크
차이 : 사용 주체가 누구인가?
1. 라이브러리 : 내가 다른 사람이 작성한 클래스를 사용.
2. 프레임워크 : 내가 만든 코드를 다른 주체가 사용하는 것.
- Spring Framework : 스프링이 나의 코드를 사용해서 어플리케이션을 구동한다.
디자인 패턴
- 객체 생성, 구조, 행위에 대한 내용을 정리한 것
- UML : 클래스와 클래스간의 관계를 표현하는데 사용되는 언어
- 세상에 존재하지는 않지만 단어는 존재하는 것이 있다.
- 추상클래스 : 존재하지 않는 객체이지만 존재하는 클래스.
- italic 체 : 추상 클래스
객체의 응집도
- 이름이 중요하다. --> 직관이 생각난다
- 구린 향기 : 클래스 이름과 메서드 이름이 잘못되었을 때
- 응집도가 높을 수록 좋은 객체이다.
- 개발 = 기능 + 리팩토링
- 리팩토링은 바로 해야한다. --> 구린 향기가 나오면 바로 제거해야 한다.
오버라이딩
- 부모의 메서드를 사용하여 재정의 하는 것
- 부모의 메서드를 변경하는 것이 아니다.
*오버라이딩과 스포츠카의 예시
Car c = new SportCar();
- "저 스포츠카는 자동차이다" 라는 뜻이다.(SportCar가 Car를 상속받는다고 가정)
c.drive() : 이건 스포츠가가 달리고 있는 것이다. 즉 스포츠 카의 메서드가 실행된다.
* 메서드가 오버라이딩 되면 무조건 자식것이 실행된다.
* 필드 변수는 오버라이딩 되지 않는다.
* 조상 타입으로는 후손 타입의 객체를 가리킬 수 있다
ex) 저 스포츠카는 자동차이다 Car c = new SportCar();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package overriding; public class Test01 { public static void main(String[] args) { //Bus 타입의 인스턴스 객체를 버스라고 취급하여 사용한다. //이 때는 버스의 모든 기능을 사용할 수 있다. Bus b= new Bus(); b.a(); b.run(); //Bus 타입의 인스턴스 객체를 자동차로 취급하여 사용한다. //이 때는 자동차로서의 메서드만 사용할 수 있다. Bus 고유의 메서드 사용 불가 Car c= new Bus(); c.run(); Object obj = new Bus(); /* * 메서드가 오버라이딩 되면 자식 메서드가 실행된다. * 필드 변수는 오버라이딩이 되지 않는다 * */ } } abstract class Car{ public void run(){ System.out.println("run"); } } class Bus extends Car{ public void a(){ System.out.println("a"); } } | cs |
Software Development Life Cycle
- 프로그래밍 : 요구사항을 구조에 맞게 구현하는 것
- 요구사항
1) 기능적 요구사항 : 장바구니 담기, 상품 조회 등
2) 비기능적 요구사항 : 품질, 성능 관련된 것. 확장성, 보안
- 비기능적 요구사항을 만족하기 위해서 아키텍쳐가 달라진다
인터페이스는 왜 만들어야 하는가?
- 자바 책 : 인터페이스가 있고 그것을 구현하는 것이 여러개가 있어서
- 하지만! 인터페이스를 구현하고 있는 클래스는 1개일 경우가 더 많다
- 인터페이스는 무슨 기능을 구현할지에 대해 선언하는 것에 필요하다. 프로그램을 짤 때는 선언부터 해야 한다. 인터페이스는 어떤 기능을 만들어야 겠다는 선언을 하는 것.
- 설계 : 앞으로 어떤 것을 개발할지에 대한 스케치.
- 테스트 할 때 편하다.
-