티스토리 뷰

Back-end

[Spring Boot] OOP에 대하여

jhkang-dev 2018. 10. 6. 15:22

 

객체 지향 프로그래밍


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개일 경우가 더 많다

- 인터페이스는 무슨 기능을 구현할지에 대해 선언하는 것에 필요하다. 프로그램을 짤 때는 선언부터 해야 한다. 인터페이스는 어떤 기능을 만들어야 겠다는 선언을 하는 것.

- 설계 : 앞으로 어떤 것을 개발할지에 대한 스케치.

- 테스트 할 때 편하다.


















댓글