이번주 목요일까지 알고리즘 테스트준비와 금요일부터는 스프링 기초 강의를 시작했다.
이번주를 돌아보며 알아볼 것은 객체지향 프로그래밍과 JVM이다
객체지향 프로그래밍
객체지향 프로그래밍 (Object-Oriented Programming)이란 프로그램을 설계하는 개념이자 방법론이다.
줄여서 OOP라 부르며, 단어 뜻 그대로 프로그램(실제세계)를 객체(사물)라는 기본 단위로 나누고 이 객체들간의
상호작용을 기본개념으로 한다.
객체지향 프로그래밍(OOP)은 프로그램을 유연하고 변경하기 쉽게 만들기 때문에 재사용성이 용이하며 대규모 프로젝트에서 많이 사용되는 방법론이다. 프로그램 개발과 유지보수가 용이하다는 점이 가장 큰 장점으로 꼽힌다!
객체지향의 특징 4가지 (추상화, 캡슐화, 상속, 다향성)
1. 추상화(Abstraction)
객체지향에서 추상화란 객체에서 공통된 속성과 행위를 추출하는 것
예를들어 게임 프로그램을 개발하며 캐릭터가 소지하는 다양한 무기들이 있다. 칼, 삽, 곡괭이, 총, 활 등 여러가지 무기들이 존재하는데 이들의 기능적인 내용은 다르지만 공통적인 속성과 행위를 개념으로 무기라는 클래스를 정의할 수 있다.
이렇듯 추상화는 다른 객체들과 구분되는 핵심적인 부분에 집중하여, 복잡도를 관리할 수 있게 해준다.
2. 캡슐화(Encapsulation)
캡슐화는 연관있는 변수와 메소드를 묶어주는 작업을 말한다.
접근 제어 지시자[public, private, protected]를 통해 외부로부터의 접근을 제한하여 객체내에서만 접근이 가능하도록
해준며, 이를 정보은닉이라 한다.
외부의 클래스 혹은 모듈에 의존적인 프로그램의 경우 변경이나 오류에 취약해지는데, 정보은닉을 통해
이러한 결합도를 낮추며 응집도를 높여준다.
3. 상속(Inheritance)
클래스 개념이 도입되면서 상속을 통해 부모클래스의 속성과 기능을 이어받아(상속받아) 사용하는 것을 말한다.
프로그램을 개발하다보면 중복되는 속성과 기능을 개발해야하는 일이 발생되는데 상속을 사용한다면 중복되는 기능을 반복하여 작업하지 않고 작업할 수 있게 해준다.
-자식클래스는 상속을 통해 부모클래스의 속성과 기능을 물려받는다.
-또한, 다형성을 통해 변경이 필요한 부분을 변경하여 사용할 수 있다.
4. 다형성(Polymorphism)
다형성이란 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 동일한 변수, 함수명 등이 다양한 방법으로
기능하는 것을 말하며. 오버라이딩(Overriding), 오버로딩(Overloading)이란 형태로 제공된다.
참고 : https://dongseokstudy2.tistory.com/10?category=913888
참고 : https://gangnam-americano.tistory.com/15
JVM 구조
JVM은 자바 가상머신으로 자바 바이트코드를 실행 할 수 있는 주체로 JVM 덕분에 CPU나 운영체제(플랫폼)과
독립적으로 동작 가능하다. JVM은 크게 Class Loader, Gc, Runtime Data Area, Excute engine 세가지로 나뉜다.
Class Loader
자바 컴파일러가 .java파일을 컴파일하면 .class파일 (바이트 코드)가 생성된다. 이렇게 생성된 클래스 파일들을 엮어
Runtime Data Area 형태로 메모리에 적재하는 역할을 한다.
Execution Engine
메모리에 적재된 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.
명령어를 하나 하나 실행하는 인터프리터 방식과 실행 시점에 자주 쓸만한 코드들을 기계어로 반환 시켜놓고
저장해서 사용하는 JIT 방식이 있다.
Garbage Collector
Heap 메모리 영영에 생성 된 객체즐중에 Reachability를 잃은 객체를 탐색 후 제거하는 역할을 한다.
Runtime Data Area
Method Area
클래스 멤버 변수, 메소드 정보, Type(Class or Interface)정보, Constant Pool, static, final 변수 등이 생성된다.
상수 풀은 모든 Symbolic Refernce를 포함하고 있다.
Heap Area
동적으로 생성된 오븍젝트와 배열이 저장되는 곳으로 Garbage Collection의 대상이 되는 영역이라.
Stack Area
지역 변수, 파라미터 등이 생성되는 영역, 동적으로 객체를 생성하면 실제 객체는 Heap에 할당되고
해당 레퍼런스만 Stack에 저장된다. Stack은 스레드별로 독자적으로 가진다.
Heap에 있는 오브젝트가 Stack에서 참조 할 수 없는 경우 GC의 대상이 된다.
PC Register
현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있다. (CPU의 PC Register와 다르다)
Native Method Stack
자바외 언어로 작성된 네이티브 코드를 위한 메모리 영역
'항해99 기록 > 회고록' 카테고리의 다른 글
4주차 회고 정리 ORM, SQL, MVC (0) | 2022.02.06 |
---|---|
3주차회고 DI, IOC, Bean (0) | 2022.01.30 |
항해99 1주차 회고 (JWT와 API) (0) | 2022.01.16 |
Chapter1 미니프로젝트를 마치며.. (0) | 2022.01.13 |
항해99 시작 1일차 (0) | 2022.01.10 |