모래블로그

JAVA (자바) 본문

Language/Java

JAVA (자바)

별모래 2023. 11. 22. 17:49
728x90

자바는?

  • Java는 객체지향 프로그래밍 언어
  • 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
  • 장점
    • JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적이다.
    • 가비지컬렉터(GabageCollector)를 통한 자동적인 메모리 관리가 가능하다.
    • 멀티스레드를 지원
    • 객체 지향 언어이다.
      • 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
  • 단점
    • JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다.
    • 다중 상속이나 타입에 엄격하며, 제약이 많다.

자바 접근 제어자 종류와 특징

  • public - 접근 제한이 없다. (같은 프로젝트 내 어디서든 사용 가능)
  • protected - 해당 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 접근 가능
  • default - 해당 패키지 내에서만 접근 가능
  • private - 해당 클래스에서만 접근 가능

OOP(Object Oriented Programing, 객체지향 프로그래밍)

OOP 5대 특징

- OOP 5대 원칙(SOLID)

  • S : 단일 책임 원칙(SRP, Single Responsibility Principle)
    한 클래스는 하나의 책임만 가져야 한다.
  • O : 개방-폐쇄 원칙(OCP, Open Closed Principle)
    확장에는 열려있고, 수정에는 닫혀있어야 한다.
  • L : 리스코프 치환 원칙(LSP, Liskov Substitution Principle)
    상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  • I : 인터페이스 분리 원칙(ISP, Interface Segregation Principle)
    인터페이스를 클라이언트에 특화되도록 분리시키라는 설계 원칙이다
  • D : 의존 역전 원칙(DIP, Dependency Inversion Principle)
    의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 것이다.
    • DIP 원칙을 따르는 가장 인기 있는 방법은 의존성 주입(DI)이다.

클래스/객체/인스턴스

  • 클래스(Class) : 객체를 만들어내기 위한 설계도 혹은 틀 이라고 할 수 있고, 객체를 생성하는데 사용한다.
  • 객체(Object) : 설계도(클래스)를 기반으로 선언된 대상, 클래스의 인스턴스라고도 부름.
  • 인스턴스(Instance) : 객체에 메모리가 할당되어 실제로 활용되는 실체

오버로딩/ 오버라이딩

  • 오버라이딩과 오버로딩의 차이
    • 오버라이딩(Overriding) 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것
    • 오버로딩(Overloading) 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것

자바 메모리 영역

자바의 메모리 공간은 크게 Method 영역, Stack 영역, Heap 영역으로 구분되고, 데이터 타입에 따라 할당된다.

  • 메소드(Method) 영역 : 전역변수와 static변수를 저장하며, Method영역은 프로그램의 시작부터 종료까지 메모리에 남아있다.
  • 스택(Stack) 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. LIFO(Last In First Out) 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.
  • 힙(Heap) 영역 : new 키워드로 생성되는 객체(인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어진다.
728x90

'Language > Java' 카테고리의 다른 글

[Java] Object toString()  (4) 2024.07.23
[Java] java.lang 패키지  (0) 2024.07.15
Map, MultiValueMap의 차이  (1) 2024.06.11