[ Spring / SW 캠프 ] OOP #1

김문경·2023년 12월 17일
0

SW 백엔드 캠프

목록 보기
3/4

OOP란 객체 지향 프로그래밍 이라는 뜻으로,
프로그래밍은 값을 받아 순서대로 처리해서 값을 출력한다 (X)
프로그래밍은 여러 독립적인 부품들의 조합으로, 객체들 사이의 유기적인 협력과 결합이 존재한다는 컴퓨터 프로그래밍의 패러다임입니다.



1. 클래스 VS 오브젝트 VS 인스턴스


  • 클래스는 설계도를 의미합니다. (class파일)
  • 오브젝트는 존재가능성입니다.(new 가능한 대상)
  • 인스턴스는 존재하는 것입니다. (new 된 대상)
public class Main { //클래스
	static final String dog = "walwal";
    
    public static void main(String[] args) {
    	Main a; //객체
        a = new Main(); //인스턴스
    }
}




2. Static VS Heap VS Stack


static

  • static은 main 메서드가 실행되기 전에 메모리에 로드됩니다.
    즉, main 실행 전에 정적으로 할당되므로 고정의 의미를 가집니다.
  • class가 없는 언어는 static 메모리가 존재하지 않습니다.
  • static은 자바 프로그램의 시작 부터 자바 프로그램이 종료 될 때 까지 메모리에 존재합니다
    • 따라서 static 메모리를 관리하는 방법은 없으며, 최대한 적게 설계하는 것이 좋습니다.

main이 실행되기 전에 메모리에 로드되므로, main에서 관리가 불가능합니다


Heap

  • heap은 class를 new 할때 메모리에 로드됩니다.
  • 자바 프로그램의 실행중에 메모리에 확보되므로, 동적 할당 됩니다.
  • heap에 할당된 데이터는 가비지 컬렉션에 의해 관리됩니다.
  • class를 n번 new하면 n개의 heap이 할당됩니다.
    • static과는 다르게 여러번 할당 가능합니다.

heap은 자원이 한정적이며, 더이상 사용되지 않을 경우 heap memory에서 자동으로 삭제됩니다. (java의 역할)


static VS heap 결론


main 시작 전에 메모리에 저장하고 싶다면 static을 사용하고,
그렇지 않은경우 new 선언으로 heap을 사용합니다.


static 시작 - main 시작 - main끝 - static끝
// 따라서 static의 경우 메모리를 가장 많이 차지합니다.


stack

  • 금방 버려질 값들을 저장합니다 (지역변수)

  • stack에 변수를 생성했을 경우, static 으로 옮길 수 없습니다.

    • main이 이미 실행된 이후이기 때문입니다.
    • 따라서 만약 정보저장이 필요하다면 heap 메모리에 저장이 되어야 합니다.




3. 상태와 행위


  • 객체(object)의 상태는 행위(메서드)에 의해서 변경되어야 합니다.

  • 변수는 private로 설정하며 getter()setter()가 필요합니다.

  • setter()의 경우 상태는 행위(메서드)에 의해 바꿔야 한다 라는 OOP의 제 1원칙에 따라 setter() 라는 이름의 메서드가 아닌, 의미가 담긴 이름 으로 만들어야 합니다.

    • setter() 함수의 경우 시간의 흐름이 필요한 것 으로,
      태어날때부터 가지는 값들은 setter() 를 통해 삽입하는것이 아닌, Constructor(생성자)를 통해서만 값을 제공해야 한다는 의미입니다.

      ex) Person이라는 객체를 만들 때 "성별"이라는 값은 (시간이 지나더라도) 변경되지 않는 값이므로, Constructor(생성자)를 통해 값을 제공합니다.

      ex2) Person이라는 객체를 만들 때 "나이"라는 값은 (시간이 지남에 따라) 값이 바뀌므로 setter(의미있는 메서드 이름)를 통해 값을 제공합니다.




4. 상속(추상화)


  • 상속이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다.

    • 상속의 목적은 재사용이 아닌, 추상화에 있습니다.
  • 다형성(IS-A) 이란 하나의 객체가 여러가지 타입을 가질 수 있다는 것을 의미합니다.

    • ex) 사과도 과일이 될수있다.
    • 잘 만들어진 다형성을 통해 DIP를 지킬 수 있습니다.
  • 컴퍼지션(HAS-A) 이란 기존의 클래스가 새로운 클래스의 구성요소가 되는 것입니다.

    • ex) 자동차 클래스를 만들때, 잘 만들어진 엔진이 있다면 컴퍼지션합니다.




5. 오버라이딩


  • 오버라이딩이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스로 다지 재정의하여 부모의 메서드를 무효화 시키는 것입니다.

  • DIP (의존성 역전 원칙)

    • 구체적인 것이 아닌, 추상적인것에 의존합니다.
  • OCP (개방 폐쇄의 원칙)

    • 기존의 클래스의 코드를 변경하지 않고 유지보수를 합니다.




6. 싱글톤 패턴


  • 싱글톤 패턴이란 객체의 인스턴스오직 1개만 생성되는 패턴을 의미합니다.

0개의 댓글