스프링8 SPRING(8) - 객체 지향의 4대특성 4 다중 상속과 자바 자바는 다중상속을 지원하지 않는다. 이렇게 보면 그 이유를 알 수 있다. 인어에게 수영하라는 메소드를 줄때, 사람처럼 수영을 해야할까 물고기처럼 수영을 해야할까. 이를 다중 상속의 다이아몬드 문제라고 한다. 결국 다중 상속은 득실관계에서 실이 더 많았기에 자바와 C#은 다중상속을 포기했다. 자바는 인터페이스를 도입해 다중 상속의 득은 취하고 실은 버렸다고 한다. 이에 대해 알아보자. 상속 상속관계 : 하위 클래스 is a kind of 상위 클래스 해석 : 하위 클래스는 상위 클래스의 한 분류다. 예제 : 고래는 동물의 한 분류다. 이렇게 정리한다면 인터페이스 인터페이스 관계 : 구현 클래스 is able to 인터페이스 해석 : 구현 클래스는 인터페이스 할 수 있다. 예제 : 고래는 .. 2021. 7. 29. SPRING(7) - 객체 지향의 4대특성 3 상속 : 재사용 + 확장 상속은 영단어를 그대로 옮기고 이를 교육에 활용하면서 오해가 생겼다. 단어 그대로의 개념과는 약간 다르다. 이런 분류도로 상속을 이해해야한다. 객체 지향에서 상속은 상위 클래스의 특성을 하위 클래스에서 상속 ( 특성 상속 ) 하고 거기에 더해 필요한 특성을 추가, 즉 확장해서 사용할 수 있다는 의미다. 그래서 부모 클래스 - 자식 클래스 라는 표현보다는 상위 클래스 - 하위 클래스 또는 슈퍼 클래스 - 서브 클래스라 표현하자. 상위 클래스 쪽으로 갈 수록 추상화, 일반화 됐다고 말하며, 하위 클래스 쪽으로 갈 수록 구체화, 특수화 됐다고 말한다. 객체 지향 상속에 있어 정말 중요한 문장이 있다. " 하위 클래스는 상위 클래스 이다. " 이는 객체 지향 설계 5원칙의 일부이다. 고.. 2021. 7. 29. SPRING(6) - 객체 지향의 4대특성 2 우선 추상화 ( Abstraction ) : 모델링 이다. 그림에서 추상화를 보면 피카소등이 있다. 눈에 보이는 그대로가 아닌 대상의 특징 더욱 정확하게 묘사하기 위해 추상적인 방법으로 표현하는 기법이다. 사전적으로 추상의 의미는 이러하다. 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용. 여기서 공통 특성 / 공통 속성 추출이라는 부분에 주목하여 보자. 추상화는 모델링이다. 관심있는 특성만 가지고 재조합하는 것. 객체 지향의 4대 특성은 클래스를 통해 구현된다. 또는 객체라고 할 수도 있다. 그래서 클래스와 객체에 대해 먼저 이야기해 보자. 클래스는 실존하는 것이 아니기 때문에, 객체부터 살펴보는 편이 이해에 좋다. 우선 저자에 따르면, 객체보다는 개체가 실제의 개념과.. 2021. 7. 28. SPRING(5) - 객체지향의 4대특성 1 와우..캡!상추다. 라는 표현을 외우자 캡 - 캡슐화 ( Encapsulation ) : 정보은닉 ( information hiding ) 상 - 상속( Inheritance ) : 재사용 추 - 추상화( Abstraction ) : 모델링 다 - 다형성( Polymorphism ) : 사용 편의 지금 읽고있는 " 스프링 입문을 위한 자바 객체 지향의 원리와 이해 " 라는 책에서는 상속의 Inheritance 라는 단어보다 더 좋은 이해를 위한 단어가 후술 된다 한다. 또한 클래스와 객체의 관계는 " 붕어빵 틀과 붕어빵 " 이라는 표현도 올바른 이해를 방해하고 있다고 하니 후술하겠다. 붕어빵 틀과 붕어빵 한글로 자바코드를 흉내내 표현해 본 예시를 가지고 오겠다. 클래스 객체명 = new 클래스(); 이는.. 2021. 7. 28. SPRING(4) - 멀티스레드, 멀티프로세스 멀티스레드의 T 메모리 모델은 스택 영역을 스레드 개수만큼 분할해서 쓰는 것이다. 그림으로 나타내면 이렇다. 멀티프로세스는 다수의 데이터 저장영역, 즉 다수의 T메모리를 갖는 구조다. 그림으로 나타내면 이렇다. 멀티프로세스는 각 프로세스마다 각자의 T메모리가 있고, 각자 고유의 공간이므로 서로 참조할 수 없다. ( 접근할 수 없다. ) 그로인해 그만큼 안전하지만, 메모리 사용량은 그만큼 크다. 멀티스레드는 하나의 T메모리 안에서 STACK영역만 분할한 것이기 때문에 하나의 스레드에서 다른 스레드의 스택 영역에는 접근할 수 없지만 STATIC영역과 HEEP영역은 공유해서 사용하는 구조다. 따라서 멀티프로레스 대비 메모리를 적게 사용할 수 있는 구조다. 서블릿은 요청당 프로레스가 아닌 요청당 스레드이다. 어.. 2021. 7. 28. SPRING(3) - 변수의 메모리상 위치 이 페이지는 오로지 하나의 내용을 다뤄볼까 한다. 이유는 별거없다. 그냥 본인이 잘못알고 있던 개념에대해 정리하기위해 강조를 주기 위함이다. 앞서 살펴본 메모리영역에서 변수의 위치는 어떠할까? 정답은 3군데 모두이다. 지역변수는 스택 영역에서 일생을 보낸다. 스택 프레임이 사라지면 함께 사라진다. 메소드에 포함된 변수의 일생이다. 클래스 멤버 변수는 스태틱 영역에서 일생을 보낸다. 스태틱 영역에 한번 자리잡으면 jvm이 종료될 때까지 고정된 ( static ) 상태로 그 자리를 지킨다. 객체 멤버 변수는 힙에서 일생을 보낸다. 객체 멤버 변수들은 객체와 함께 가비지 컬렉터라고 하는 힙 메모리 회수기에 의해 일생을 마치게 된다. 지역변수는 흔히 main 메소드의 변수를 생각하면 된다. 클래스 멤버 변수는 .. 2021. 7. 27. SPRING(2) - 메모리영역의 구분 프로그램이 메모리를 사용하는 방식 좌는 코드실행 영역, 우는 데이터 저장 영역 이다. 자바는 객체 지향 언어 이지만, 절차적, 구조적 프로그래밍의 일부를 포함하고 있다. 해당 부분만 간단히 짚고 가겠다. 절자척 프로그래밍은 한마디로 goto를 사용하지 말라는 것. 이유는 프로그램의 실행순서가 인간이 이해하기에 너무 복잡해질 우려가 있기때문이다. 이러한 이동이 잦아지면, 소스를 이리저리 따라가면서 프로그램을 이해해야하는데, 만만한 작업이 아니다. 프로그램을 잘 구성하면, goto의 이용을 피할 수 있다. 이러한 점 때문에 자바는 goto를 사용하지 못하게끔 예약어로 등록해두었다. 공식문서에서도 not used로 표현되어있다. cons의 역할도 final이 대신하기에 not used로 되어있다. 구조적 프로.. 2021. 7. 27. SPRING (1) - SPRING의 기본 개념 SPRING을 공부하기전에 개념적인 부분을 먼저 잡고 넘어가자. 자바라는 제품은 OOP라는 객체 지향 프로그래밍의 개념을 다룬 것이다. SPRING 프레임워크라는 제품은 OOP 프레임워크라는 개념을 다룬 것이라고 생각하고 진행하겠다. 스프링 프레임워크에는 끈이론의 끈 처럼 근원저인 요소가 있는데 IoC/DI AOP PSA 이디. IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다. DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. .. 2021. 7. 27. 이전 1 다음