1. 변수란 무엇인가?

  • 코드 관점: 값을 대입하거나 변경할 수 있는 요소.
  • 메모리 관점: 데이터를 담는 일정 크기의 공간. 데이터 형식에 따라 크기가 달라집니다.
  • 수학적 관점: 변하는 값을 가진 요소.

컴퓨터에서 변수를 사용하려면 변수 선언이 필요합니다.
변수 선언은 컴파일러에게 필요한 메모리 공간을 예약하도록 지시하는 과정입니다.

int x; // 변수 선언
x = 100; // 데이터 할당
 

2. 메모리와 변수의 관계

변수를 선언하면 메모리 공간이 할당되고, 값을 대입하면 해당 공간에 데이터가 저장됩니다.

예시:

int x = 100;

위 코드는 선언과 동시에 값을 할당한 경우로, 변수 x의 메모리 공간에 100이 저장됩니다.


3. 값 형식(Value Type)과 참조 형식(Reference Type)

변수는 값 형식참조 형식으로 나뉩니다.

a. 값 형식 (Value Type)

  • 데이터를 스택(Stack) 메모리 영역에 저장.
  • 코드 블록이 끝나면 자동으로 제거됩니다.
  • 저장 및 제거 과정: 위 코드에서 b가 먼저 제거되고, 다음으로 a가 제거됩니다.
  • {
        int a = 100;
        int b = 200;
    }

b. 참조 형식 (Reference Type)

  • 데이터는 힙(Heap)에 저장되고, 스택은 힙의 메모리 주소를 참조합니다.
  • 코드 블록이 끝나도 힙에 데이터는 남아 있습니다.
  • 힙의 데이터를 제거하려면 **가비지 컬렉터(Garbage Collector)**가 필요합니다.

예시:

object a = 10;
  • 스택: 변수 a와 메모리 주소값 (&2000) 저장.
  • : 데이터 10이 주소 2000에 저장.

4. 변수의 종류

a. 전역 변수 (Global Variable)

  • 클래스 내부에서 선언되며, 클래스 객체가 살아있는 동안 참조 가능합니다.
  • 기본값이 자동으로 할당됩니다. (예: int 타입은 0)

예시:

class Example
{
    int globalVar; // 기본값 0 자동 할당
}

b. 지역 변수 (Local Variable)

  • 메서드 내에서 선언되며, 메서드 호출이 끝나면 메모리에서 제거됩니다.
  • 기본값이 자동으로 할당되지 않으므로, 초기화를 해야 사용 가능합니다.

예시:

public void Method()
{
    int localVar;
    localVar = 100; // 초기화 필수
}

5. 메모리 구조 요약

  • 스택(Stack): 값 형식 데이터를 저장하며, 데이터가 코드 블록이 끝나면 제거됩니다.
  • 힙(Heap): 참조 형식 데이터를 저장하며, 데이터가 명시적으로 제거되지 않으면 계속 유지됩니다.

1. 자바의 탄생 배경

  • 개발 배경:
    • 자바는 1991년, 제임스 고슬링과 선 마이크로시스템스(Sun Microsystems) 연구원들이 개발.
    • 가전제품, 휴대용 장치 등에 독립적이고 안정적인 소프트웨어를 개발하기 위해 설계.
  • 이전 상황:
    • 당시 주로 사용되던 언어는 **C와 C++**로, 운영체제에 종속된 실행 파일을 생성.
    • 자바는 이를 개선하여 운영체제 독립적 실행을 목표로 개발됨.

2. 자바와 운영체제 독립성

  • C와 C++의 한계:
    • 예: Test.exe는 윈도우에서 실행 가능하지만 리눅스에서는 불가능.
    • 다른 운영체제에서 실행하려면 해당 환경에서 다시 컴파일 필요.
  • 자바의 접근 방식:
    • 자바 코드를 컴파일하면 **바이트 코드(Bytecode)**인 .class 파일 생성.
    • 이 바이트 코드는 특정 운영체제와 무관하며, **JVM(Java Virtual Machine)**이 실행을 담당.
    • 결과적으로, 한 번 작성한 자바 프로그램은 다양한 운영체제에서 실행 가능.
      (Write Once, Run Anywhere)

3. 자바 가상 머신(JVM)과 JIT 컴파일러

  • JVM(Java Virtual Machine):
    • 자바 바이트 코드를 실행하는 환경.
    • 운영체제에 맞는 **자바 실행 환경(JRE)**이 JVM을 제공.
  • JIT(Just-In-Time) 컴파일러:
    • 실행 시점에 바이트 코드를 기계어로 변환.
    • 동일한 코드가 반복 실행될 경우 이전에 변환된 기계어를 재사용.
    • 효율성:
      • 이전의 해석기 방식(Java Interpreter)보다 성능이 10~20배 향상.

4. 자바의 객체 지향 프로그래밍

  • 객체 지향의 정의:
    • 프로그램의 흐름이 아닌, 객체 간의 상호작용을 중심으로 설계.
    • 객체(Object): 프로그램의 대상, 데이터와 동작을 캡슐화.
  • 장점:
    • 공통 기능 수정 없이 새로운 기능 추가 가능.
    • 유지보수 용이, 확장성 뛰어남.
  • 예시:
    • 쇼핑몰 시스템:
      • 객체: 회원, 상품, 주문, 배송.
      • 각 객체는 독립적이며 상호 협력.

5. 자바의 안정성

  • 안정적 설계:
    • 포인터 제거:
      • 메모리를 직접 제어하지 않아 오류 가능성 감소.
    • 가비지 컬렉터(GC):
      • 동적 메모리 관리를 자동화하여 효율적이고 안전한 메모리 사용 보장.
  • 기존 언어 대비 개선:
    • 자바는 C와 C++의 모호성과 불안정한 요소를 제거.

6. 주요 프로그래밍 언어와 자바 비교

언어특징속도

C 속도가 빠르고 컴퓨터 하드웨어 제어 가능. 가장 빠름
C++ 객체 지향 언어, 클래스 사용 가능. 빠름
Java 운영체제 독립적, 안정적, 가비지 컬렉터 제공. 상대적으로 느림
C# 마이크로소프트에서 개발, 자바와 유사한 객체 지향 언어. Java와 유사

7. 자바의 플랫폼 독립성

  • 포팅 및 컨버팅 필요 없음:
    • 자바는 리눅스와 윈도우 등 다양한 환경에서 동일하게 작동.
  • MS와 SUN의 차이:
    • MS: 윈도우 중심.
    • SUN: 리눅스와 윈도우를 모두 지원하는 JRE 제공.

8. 자바가 제공하는 주요 장점

  1. 운영체제 독립성:
    • JVM을 통해 다양한 플랫폼에서 실행.
  2. 안정성:
    • 포인터 제거와 가비지 컬렉터로 메모리 관리 효율화.
  3. 객체 지향 프로그래밍:
    • 유지보수와 확장성 뛰어남.
  4. 광범위한 활용:
    • 웹 애플리케이션, 모바일 앱(Android), 엔터프라이즈 솔루션 등.

요약

  • 자바는 C와 C++의 단점을 개선한 운영체제 독립적이고 안정적인 객체 지향 언어.
  • JVM을 통해 플랫폼 독립성을 제공하며, JIT 컴파일러로 성능 최적화.
  • 안정성, 유지보수성, 확장성에서 강점을 보이며, 다양한 분야에서 널리 사용.

+ Recent posts