항해99 개발일지

[항해99] 14일차 (WIL : 주특기 입문 Spring)

펭귄코기 2022. 10. 2. 21:32

시간이 참 빨리 가는거 같다 매일 평균 16시간 넘게 컴퓨터 앞에서 공부하다보니

주말에는 조금 쉬고싶은 마음이 들기도 한다

그래도 오전에 조금 리프레쉬겸 산책도하고 청소도하고 쉬다가

저녁먹고나서 다시 컴퓨터를 키고 공부를 시작한다..ㅋㅋㅋ

마음놓고 쉬기엔 해야할 공부가 넘쳐나고 마음만 불안해져서 매일 공부를 하는거 같다

앞으로 취업이 되어서 회사를 다니더라도 꾸준히 공부하고 블로그도 작성해서

흔한 개발자가 아닌 실력있는 개발자가 되는 목표를 이루고 말 것이다

 

이번주 WIL 키워드

- 객체지향 프로그래밍

- JVM

 

객체지향 프로그래밍 (OOP : Object Oriented Programming)

현실 세계의 개체(Entity)를 하나의 객체(Object)로 만들어서

즉 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고

객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다

 

객체지향 프로그래밍의 장점

- 코드 재사용 용이

상속을 통해 코드의 재사용을 높일 수 있다

 

- 유지보수의 우수성

캡슐화를 통해 유지보수가 쉽다

 

- 대형 프로젝트 적합

클래스 단위로 모듈화 개발로 업무 분담

 

객체지향 프로그래밍의 단점

개발속도가 느림

- 객체가 처리하려는 것에 대한 정확한 이해가 필요 설계에 시간이 오래걸림

 

실행속도가 느림

- 객체지향 언어가 대체적으로 실행속도가 느림

 

코딩 난이도 상승

- 다중 상속과 같은 이유로 복잡도 상승

 

OOP의 4가지 특징

- 캡슐화 (encapsulation)

데이터와 코드의 형태를 외부로부터 알 수 없게 하고

데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법

 

캡슐화 하는 방법은

멤버 변수 앞에 접근 제어자 private를 붙이고

getter / setter 메서드를 만들어 준다

 

- 추상화 (abstract)

클래스들의 공통적인 특성(변수, 메서드)들을 묶어 표현하는 것

 

- 상속화 (inheritance)

부모 클래스에 정의된 변수 및 메서드를 자식 클래스에서 상속받아 사용하는것

 

- 다형화 (polymorphism)

다양한 형태로 표현이 가능한 구조를 말함

 

오버로딩 (Overloading)

오버라이딩 (Overriding)

 

OOP의 5가지 원칙 (SOLID)

- 단일 책임 원칙 (SRP : Single Responsibility Principle)

한 클래스는 하나의 책임만 가져야한다

 

- 개방 폐쇄 원칙 (OCP : Open/Closed Principle)

확장에는 열려있으나 변경에는 닫혀 있어야 한다

 

- 리스코프 치환 원칙 (LSP : Liskov's Subsitution Principle)

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서

하위 타입의 인스턴스로 바꿀 수 있어야 한다

 

- 인터페이스 분리 원칙 (ISP : Interface segregation Principle)

특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나 보다 낫다

 

- 의존관계 역전 원칙 (DIP : Dependency Inversion Principle)

추상화에 의존한다, 구체화에 의존하면 안된다

 

JVM (Java Virtual Machine)

직역하면 자바를 실행하는 머신이라는 건데

그냥 자바를 작동시키는 프로그램 정도로 이해하면 된다

 

자바로 작성된 모든 프로그램은 JVM에서만 실행될 수 있고

자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다

 

JVM은 JRE에 포함되어 있어서 JRE가 설치되어 있다면 JVM도 설치 되었다는 뜻이다

 

JVM을 사용하면 자바 프로그램을 모든 플랫폼에서 제약없이 동작할 수 있다는 이점이 있다

 

동작 과정

1) IDE에서 인간이 알아듣는 .java 파일을 만들어서 코드를 친다

2) 컴파일러가 javac 명령어로 .java파일을 .class파일인 바이트코드로 컴파일 한다

3) JVM이 .class파일을 즉 바이트코드를 컴퓨터가 알아듣는 기계어인 바이너리코드로 변환한다

 

바이너리 코드 (Binary Code)

컴퓨터가 인식하고 이해할 수 있는 0과 1로 구성된 코드

 

바이트 코드 (Byte Code)

가상머신이 인식하고 이해할 수 있는 중간 레벨로 컴파일 한 코드

 

월~일 공부시간