[자바와 객체 지향 그리고 스프링] 1. 자바란

코린이서현이·2023년 12월 30일
0

🖐️들어가면서

기계어, 어셈블리어, C언어, JAVA의 차이를 알아보고자 한다.
그런데 사실 자바를 학습하면서 아주 짧게 포스팅한 적이 있었다. 글을 다시 확인해보니 프로그래밍에 대한
이해가 낮았던 때라서 내가 이해할 수 있는 정도로만 포스팅하였다.
그래서 그 부분을 다시 고쳐가면서 재 포스팅을 하려고 한다.

📕 코딩의 역사

기계어

컴퓨터의 언어표현방법은 0과 1뿐이다. 그런 컴퓨터와 소통하기 위해 사용하는 언어는 0과1로 이루어진 기계어이다. 🤮

어셈블리어

우리가 사용하는 언어로 기계어에 니모닉을 일대일로 매칭해 표현 한 것이다.

  • 컴퓨터의 방식마다 다른 언어표현을 가진다.
  • A 컴퓨터는 더하는 것을 ADD로 B컴퓨터는 PLUS로

😊 이제 0과 1이 아닌 인간의 언어로 컴퓨터와 소통하게 되었으니 좋은걸?

🤮 그런데 컴퓨터별로 니모닉이 다르니까 스트레스야…!!

C언어의 이식성

운영체제와 독립적으로 코드(소스파일)를 작성할 수 있다. 👉 싱글코드

소스코드를 운영체제(OS)별 컴파일을 사용해 OS에 맞는 목적코드로 만들어준다.

🤮 해당 플랫폼에 맞는 목적코드가 필요해!
🤮 아직까지는 프로그래밍할 때 컴퓨터의 논리에 맞춰서 생각해야해 😢

객체 지향 등장: 😎 객체 지향이 발전된 버전인 이유!

인간의 논리로 프로그래밍 할 수 있게 되다.

저수준 언어 vs 고수준 언어

  • 저수준 언어 : 컴퓨터 친화적인, 컴퓨터 논리적인
  • 고수준 언어 : 인간 친화적인, 인간의 논리로 구성된 언어

➡️ 프로그래밍이 친숙해졌다!

자바의 목적파일 등장

운영체제와 독립적으로 자바 목적코드(바이트코드)를 작성할 수 있다.
운영체제별로 존재하는 JVM을 사용해서 실행된다.
➡️ 자바 목적 코드는 운영체제나 아키텍처와 독립적으로 JVM만 설치되어 있다면 실행될 수 있다.

😊 성능 측면에서 특정 언어로 직접 컴파일된 프로그램보다 상대적으로 느릴 수 있다는 것이 있지만 이는 최근의 JVM 개선과 하드웨어의 성능 향상으로 크게 완화되었다.

자바 구조 설명

JDK (자바 개발 키트)

  • 자바로 개발시에 필요한 도구들을 제공하는 소프트웨어 개발 키트이다.
  • 자바 컴파일러 자바 가상머신 디버깅도구등이 포함되어있다.

JRE (Java Runtime Environment)

  • 실행할 때 쓰이는 자바런타임환경이다. JDK는 개발할 때 쓰인다는 것과 차이점이 있다.
  • JRE = JVM + 자바 표준 라이브러리(API)

JVM (자바 가상 머신)

  • 자바 바이트코드를 해당 플랫폼에서 실행 가능한 기계어로 해석하고 실행한다.
  • JVM으로 구현하는 플랫폼별 독립성, 각 플랫폼마다 JVM이 운영 체제와 하드웨어에 독립적인 중간 계층을 제공하여 자바의 플랫폼 독립성을 실현한다.

JRE는 자바 프로그램을 실행하는 데만 필요하며, 개발자는 JDK를 사용하여 애플리케이션을 개발하고 빌드한다.

객체 지향과 자바…?

이제 공부할꺼니까...ㅎ 아래 개념들을 길게 설명할수는 없다.ㅎ 차례차례 잘 공부해보도록 하겠다. 

OOP : 객체지향프로그래밍 `→ 자바나 C++, C#`

추상화, 상속, 다형성, 캡슐화로 완성된다. 프로그램을 객체와 객체의 작용으로 만드는 것!

CBD : 컴포넌트 기반 개발방법론

애플리케이션을 의미있는 단위로 구분하고 그 단위를 하나의 부품으로 개발헤, 이 부품들을 결합해 소프트웨어 제품을 완성하자는 방법론

SOA : 서비스 지향 구조

개발자의 입장이 아닌 실제 현실의 업무를 기준으로 개발하는 사상

스프링이 어려운 이유

OOP는 자바, C++, C#을 통해서 구현할 수 있다. 그런데 CBD와 SOA는 제품이 따로 없다. 흠… 그렇다면 스프링은 어떤 것의 제품일까? SOA? CBD? 🤮 스프링은 어려워~!

스프링이 어렵다면, 1. 스프링의 배경이론을 알지 못하기 때문이고, 2 스프링 프레임워크가 너무 방대하기 때문이라고 한다.

책의 필자는 스프링의 개념을 OOP 프레임 워크, 더 구체적으로 말하면 IoC/DI , AOP, PSA 이라고 한다.

스프링의 배경, 개념

아까 스프링이 "어떤 것"을 구현할 수 있게하는 프레임워크라고 말했다.
이 어떤 것이 객체지향과 디자인 패턴이라고 느꼈다. 
스프링을 소개하는 여러 개발자는 스프링 프레임워크가 프로그래밍 발전의 정점에 있다고 한다.
  • IoC/DI : 제어의 역전과 의존성 주입
  • AOP : 관점 지향 프로그래밍
  • PSA : 이식 가능한 서비스 추상화

🤔 사실 저번학기에 스프링을 공부하면서 들어본 개념이기는 하다. 그러나 잘 모르겠다~ 이책을 통해서 공부를 하고 싶은 마음이다!

스프링으로 할 수 있는 것

엔터프라이즈 애플리케이션을 구현하는데 필요한 거의 모든 서비스를 제공한다.

ORM, PXM, JMS, AOP, CoC 등등…

ORM은 객체와 관계형 데이터베이스 간의 매핑을 자동화하는 기술이다.

그래서 뭘 공부하고 싶은데요!!

스프링 프레임 워크는 OOP 프레임워크라는 개념을 제품화 한것이고. 도구로 자바를 선택했으니..?

  • OOP 개념
  • 자바언어의 문법
  • 자바가 OOP를 구현한 방식
  • 스프링의 입문

를 공부할 것이다! ☺️

profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글