자바를 Java!

정유빈·2025년 3월 31일

혼자 공부하는

목록 보기
1/2
post-thumbnail

들어가기에 앞서...

Java 특징

  • 객체 지향 : Java는 주로 객체 지향 프로그래밍(OOP) 언어이다. 즉, 데이터와 기능을 나타내는 객체의 사용을 강조한다.
  • 플랫폼 독립성 : Java 프로그램은 JVM에서 실행할 수 있는 바이트코드로 컴파일 된다. 이를 통해 Java 애플리케이션은 코드를 다시 컴파일할 필요 없이 호완되는 JVM이 있는 모든 플랫폼에서 실행할 수 있다
  • 자동 메모리 관리 : Java는 사용되지 않는 메모리(garbage collection) 수집 메커니즘을 통해 자동 메모리 관리를 제공한다. 프로그램에서 더 이상 필요하지 않은 메모리를 자동으로 회수하여 개발자가 메모리를 더 쉽게 관리할 수 있도록 한다.
  • 표준 라이브러리 : Java는 입/출력, 네트워킹, 스레딩 및 데이터 구조와 같은 일반적인 프로그래밍 작업을 위한 광범위한 클래스와 함수를 제공하는 포괄적인 표준 라이브러리와 함께 제공된다
  • 멀티스레딩 : Java는 멀티스레딩을 지원하여 프로그램이 여러 스레드를 동시에 실행할 수 있도록 한다. 이것은 독립적으로 수행할 수 있는 작업에 유용하며 특정 유형의 응용 프로그램의 성능을 향상시킬 수 있다.

Java 프로그램 실행 과정

  • Java 프로그램에서 모든 소스 코드는 텍스트 파일로 작성되고 .java 확장자를 가진다.

  • 이 소스코드가 javac 컴파일러에 의해 컴파일 되어 .class 파일로 만들어진다.

  • 이 .class 파일은 실행되는 컴퓨터의 네이티브 코드(native code)를 가지고 있지 않은 상태로 바이트코드(bytecode)를 가지고 있다

  • 바이트코드는 JVM(Java Virtual Machine: 자바가상기계)에서 실행될 수 있는 기계어 코드이다.

  • JVM이 설치되어 있는 컴퓨터에서 java 명령어를 사용하여 .class 파일을 실행한다.

  • .class 바이트 코드는 JVM이 설치된 어떤 이기종 컴퓨터에서도 실행이 가능하다.

  • 또한, JVM은 Java 프로그램과 하드웨어 사이에 위치하여 Java 프로그램 개발을 위한 API를 제공하고 Java 바이트코드를 해석항 실행하는 역할을 한다.

cs 지식

SPRING

스프링의 진짜 핵심

  • 스프링은 자바언어 기반의 프레임워크
  • 자바 언어의 가장 큰 특징 - 객체 지향 언어
  • 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
  • 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
    <-> 이전에 존재한 EJB은 객체 지향 특징을 잃어버리게 사용한다.

그렇다면 좋은 객체 지향 이란 무엇이냐

객체 지향 특징

  • 추상화
  • 캡슐화
  • 상속
  • 다형성

객체 지향 프로그래밍

  • 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것이다. 각각의 객체메시지를 주고받고, 데이터를 처리할 수 있다. (협력)

  • 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.

유연하고, 변경이 용이하다? 이게 무엇이냐

  • 레고 블럭 조립하듯이
  • 키보드, 마우스 갈아 끼우듯이
  • 컴퓨터 부품 갈아 끼우듯이
  • 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법이다.

-> 다형성

자동차의 역할은 앞으로 가는 것이다.

자동차가 바뀌어도 운전자에게 영향을 주지 않는다.
이를 통하여서 운전자는 자동차의 역할에 의존하고 있음을 알 수 있다.

운전자는 자동차의 내부구조를 몰라도 된다.
내부적으로 바뀌어도 자동차 역할만 그래도 맞춘다면 사용자에게 영향을 주지 않는다.

이를 통하여서 운전자에게 영향을 주지 않고 새로운 기능을 제공할 수 있다

이것이 가능한 이유는 역할과 구현으로 세상을 구분하였기 때문이다.

  • 로미오 역할의 경우 줄리엣 역할에 대해서 몰라도 된다.
  • 배우는 대체가 가능해야 한다.

유연하고 변경이 용이하다.

역할과 구현을 분리

  • 역할구현으로 구분하면 세상이 단순해지고, 유연해지면 변경도 편리해진다.
  • 장점
    • 클라이언트는 대상의 역할(인터페이스)만 알면 된다
    • 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
    • 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
    • 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.

자바 언어

  • 자바 언어의 다형성을 활용
    • 역할 = 인터페이스
    • 구현 = 인터페이스를 구현한 클래스, 구현 객체
  • 객체를 설계할 때 역할구현을 명확히 분리
  • 객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기

    역할 > 구현 ( 역할이 구현보다 중요하다 )

  • 클라이언트 : 요청
  • 서버 : 응답

서버가 클라이언트가 되어서 다른 서버에게 요청할 수 있다.
해당 부분에서 응답이, 꼭 데이터를 넣어서 return 값이 없어도 된다.

오버로딩 vs 오버라이딩

  • 오버로딩 :

용어

  • IoC(Inversion of Control) 제어의 역전

    • IoC를 설명할 때 흔히들 할리우드 원칙을 들어서 설명하곤 한다.
  • DI

  • SOLID

코드

profile
대한민국의 미래를 묻는다면 고개를 들어 나를 쳐다보거라

0개의 댓글