티스토리 뷰
2주차가 정신없이 지나갔다..!
2주차에는 내가 선택한 언어인 자바의 문법을 공부하는 시간이었다.
먼저 자바를 쓸 것이라면 자바를 왜 써야하는 지 알아야 하는 게 우선이라고 생각했다.
자바를 쓰는 이유!
- 운영체제 (OS) 에 구애받지 않는다.
- 메모리를 자동 관리한다.
- 객체 지향 프로그래밍이다.
어떻게 운영체제에 구애받지 않을 수 있을까?
먼저 자바를 이용하기 위해 설치했던 jdk에 포함된 jvm이란 소프트웨어 덕분이다.
먼저 내가 자바로 코드를 작성하는 과정을 살펴보자.
내가 IDE로 글쓰듯이 작성하는 것은 바로 소스코드! 이건 나를 위한 코드이다.
이건 cpu가 인식하지 못하니 기계어로 바꿔줘야 한다.
즉, 컴파일을 해야하는 것이다.
여기서 자바의 차이점이 등장!
자바는 JVM이라는 소프트웨어를 거쳐서 OS에 도달하기 때문에
OS가 인식할 수 있는 기계어로 바로 컴파일되는 게 아니라, JVM이 인식할 수 있는 바이트 코드로 컴파일 된다!!
(여기에서 javac가 등장하는데, 쉽게 생각하면 javac 자바 코드를 컴파일 시켜주는 프로그램이다.
javac는 명령어를 통해 자바 코드를 .class파일로 저장시켜주고, java는 명령어를 통해 .class를 실행시켜준다고 생각하자!)
변환된 바이트코드는 기계어는 아니어서 OS에서 바로 실행되지 않는다.
이때, JVM이 OS가 바이트코드를 이해할 수 있도록 해석해주는 것이다.
이러한 과정때문에 자바 파일을 만들면 JVM을 통해 어떤 운영체제에서도 실행이 가능한 것이다.
메모리를 자동 관리한다.
이것은 JVM내부의 가비지 콜렉터, GC라고 불리우는 것 때문에 가능하다.
이것은 자세히 공부하지 않아 지금 당장 설명하기 어렵지만,
이것은 힙 영역에서 사용하지 않는 객체들을 제거하는 작업을 말한다.
이는 개발자가 자바라는 언어에서 메모리를 직접 확보하지는 못하기 때문에 객체를 사용하고 제거하는 기능이 필요해서 생겼다고 한다.
자동 관리 기능이 먼저 생겨난 것인지, 이 언어에서 메모리와 관련된 문제가 있어 이를 해결하기 위해 자동 제거가 필요하게 된 것인지도 한 번 찾아봐야겠다.
마지막으로 대망의 객체지향 프로그래밍!
정말 단순히 이해하고자 한다면 붕어빵과 붕어빵 틀을 생각하면 된다.
붕어빵 틀이 있다면 붕어빵 내부를 살짝씩 바꿔가면서 계속해서 찍어내는 것을 상상하면 이게 객체지향을 간접적으로 이해하는 데 도움이 된다.
여기에서 추상화, 캡슐화, 상속, 다형성이라는 개념이 등장하는 데, 이건 기본이니 일단은 넘어가도록 하자.
하지만 이정도 수준에서 머물수는 없는 법!
조금 더 자세히 설명하기 위해서 코드의 의존성이라는 것을 파악해야 한다.
의존성이란, A,B가 있을때 B가 바뀔때 A도 바뀔 수 있는 경우에 의존성이 있다고 표현한다.
즉, 변경에 영향을 받는 것이다!
다만 이게 무조건 바뀌는 경우에만 의존성이 있다고 하는 것이 아니다.
B가 바뀔때 A가 바뀌지 않는 경우도 있는데, 한마디로 A가 바뀔 여지가 있으면 의존성이 있다고 하는 것이다!
이러한 개념을 통해 객체지향을 정의!
"객체지향은 의존성을 관리해 변경 영향을 최소화 할 수 있는 개발"이라고 정리했다.
추가로 더 알아보면 ,
Robert C. Martin이 블로그에 기재한 Clean Architecture라는 글에서 나오는 내용인데,
SOLID라는 객체지향 원칙을 통해 의존성이 고수준 정책을 향해야 한다고 한다.
여기에서 고수준이라는 것은 보다 상위의 개념, 추상화된 개념이라고 생각하면 쉽고,
(예를들면 데이터를 저장할 것이다, 가격을 계산한다.)
저수준이라는 것은 추상화된 개념을 어떻게 구현할지에 대한 내용이라고 생각하면 쉽다.
(예를들면 mongoDB에 데이터를 저장한다. ~~에 속한 가격만을 합산해 가격을 계산한다.
즉, 저수준의 방법론적인 내용으로 고수준의 것들에 영향을 미치게 해서는 안된다는 것이다.
따라서 이 내용을 조금 더 추가해 보면 객체지향이라는 것은
<의존성을 관리해 변경 영향을 최소화 할 수 있는 개발이라고 할 수 있고, 이 객체지향에서 중요한 것은 SOLID라는 객체지향 5대 원칙 중, DIP라는 원칙을 통해 고수준의 정책들과 저수준의 세부사항들을 분리하는 것이다.>
라고 할 수 있다!!
이걸 쓰다보니 다음에 쓸 게시글이 나왔다! 객체지향 5대원칙 SOLID!
solid는 5대원칙 내용의 앞글자만 따온 것인데, 이건 다음 게시물로 작성해야겠다.
'Learned!' 카테고리의 다른 글
[bootCamp][항해99] 항해 3주차 마무리 - 느슨한 결합? (0) | 2022.12.25 |
---|---|
221221 String 비교할때 == 말고 equal (0) | 2022.12.21 |
221215 자바의 기초 중의 쌩 기초를 훑어본 날(JDK, 모듈, 빌드 툴) (0) | 2022.12.14 |
[bootCamp][항해99] 1주차 마무리 - 쿠키와 토큰, 왜 JWT? (0) | 2022.12.11 |
221210 댓글기능 구현 (0) | 2022.12.10 |
- Total
- Today
- Yesterday
- Redis
- 동적크롤링
- jmeter시나리오
- bankersRounding
- jmeter쿠키
- jmeter세션
- index
- Lock
- hackerrank
- Redisson
- Java
- jmeter로그인
- 항해
- Spring
- CorrectnessAndTheLoopInvariant
- jmeter부하테스트
- pessimisticlock
- jwt
- jmeter테스트
- 프로그래머스
- 인덱스
- 토큰
- jmeter토큰
- Python
- EC2
- CheckedException
- 부하테스트시나리오
- 스프링faker
- 대규모더미데이터
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |