WIL (Weekly I Learned) 1월 4째주

2022. 1. 24. 01:36WIL(Weekly I Learned)

반응형
<배운 것>

1. JVM(Java Virtual Machine)

  • Java를 실행하기 위한 가상머신

Java 애플리케이션은 JVM을 한 번 더 거치면서 하드웨어에 맞게 완전히 컴파일된 상태가 아니고, 실행시에 해석(interpret)된다. 이 때문에 속도가 느리다는 단점을 가지고 있다. 그러나 바이트코드(컴파일된 Java 코드)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였다.

또, 우측의 일반적인 애플리케이션은 OS와 바로 맞붙어 있기 때문에 OS 종속적이다. 그래서 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야 한다. 반면 Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능하다.


2. 객체지향 프로그래밍

 
데이터를 객체로 취급하여 프로그램에 반영한 것
 
순차적으로 프로그램이 동작하는 기존의 것들과 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작한다.
 
Java의 경우에는 구현은 Class, 사용은 Object로 구분단위를 가지며
 
구현한 객체들을 벽돌처럼 쌓듯이 합쳐서 전체 결과물을 만든다.
  • 객체 : 실제로 존재하는 것. 사물 또는 개념, 논리
  • 클래스 : 객체를 정의해 놓은 것
  • 인스턴스 : 클래스로부터 객체를 생성한 것

특징

  • 코드 재사용이 높음, 코드의 변경이 용이
  • 유지보수 용이
  • 직관적인 코드 분석 가능
  • 상속, 다형성(Polymorphism), 캡슐화(encaptulation)

절차지향 프로그래밍과의 차이

  • 절차지향, 구조적 프로그래밍(C)

초창기에 많이 사용한 방법으로 순차적 프로그래밍이라고도 한다. 해야할 작업을 순서대로 코딩을 한다. 구조적 프로그래밍에서는 함수 단위로 구성되며 기능별로 묶어놓은 특징이 있다. 컴퓨터의 처리 구조와 유사해 실행 속도가 빠르다는 장점이 있다.

  • 객체지향 프로그래밍(Java, C++, C#)

주 구성요소는 클래스와 객체이다. 그리고 상속 다형성을 특징으로 들 수 있다. 클래스를 활용하여 각각의 기능별로 구성이 가능하며, 이를 나중에 하나로 합쳐서 프로그램의 완성이 가능하다. 객체 별로 개발이 가능하기에 팀 프로젝트를 하기에도 유리한 장점을 가지고 있다. 또한 코드의 재사용이 가능하며, 오류 발생 가능성이 적고 안정성이 높다.

예를 들면 물건을 파는 판매자와 사는 구매자가 있다고 하자. 그렇다면 “판매자”와 “구매자”는 서로 다른 객체인 것이다. 즉, 객체지향에서의 클래스는 어떠한 ‘행동’을 하는 사람이라고 생각하며 구현해야한다. 이래도 이해가 되지 않는다면 객체는 작은 프로그램이라고 생각해도 된다. 즉, 프로그램에서 필요한 행위들을 일반화 시켜서 객체로 만들고 이 객체를 사용하는 형태로 프로그래밍을 하는 것.

  • OOP란?
  • 객체란?
  • - Object(객체)는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수). 즉 절차, 방법, 기능을 모두 포함한 개념
    - 클래스는 객체를 만들기 위한 설계도
  • Java 특징?

 
 
<생각>
 
이번주는 알고리즘 모의고사와 알고리즘 테스트 두번의 알고리즘 시험을 보았고, 다행히 둘다 통과를 하였다.
알고리즘 문제를 처음 봤을 때 와는 다르게 이제는 그렇게 당황하지는 않는다. 나에게는 구굴링이라는 무기가 있고, 생각하면서 모르는 문법같은 것을 찾아 쓸 수 있기 때문이다. 일주일간의 알고리즘 공부 시간이였지만, 코딩테스트를 위하여 시간이 날 때 마다 꾸준히 문제를 풀어보면서 실력을 키워봐야겠다. 
 
드디어 주특기 기본이 시작되었다! 내가 고른 나의 첫 주특기는! 바로~ 스프링 너로 정했다!
하지만 스프링과의 만남은... 썩 달콤하지는 않았다.
아직 자바의 문법과 개념이 서툰 나에게는 모든 것이 낮설고 어렵게 느껴진다. 빨리 익숙해져서 불편함을 없에야 겠다. 그리고 틈틈히 자바의 문법과 개념도 공부해 나갈 생각이다. 
일단 스프링으로 결정한 이상 자바를 잡아(?)버리겠다! ㅎㅎㅎ
반응형