JAVA 객체의 특징

강정우·2022년 7월 12일
0

JAVA

목록 보기
12/31
post-thumbnail

7/12 강의

  • 패러다임을 빠르게 반영하고 구현할 줄 아는 개발자가 되자!
  • 자바의 정성을 chater 7까지 정독 했음에도 불구하고 나중이 되니 조금 헷갈린다. 수업에 더 집중해서 잘 들어야겠다.
  • main.java를 run을 누르면 컴파일러가 컴파일을 실시한다. 이는 main.class로 바꾸어 주고 이것을 JVM의 JRE가 실행하여 최종적으로 이클립스 안에서 돌아갈 수 있게 IDE가 도와주고 있는 것이다.
  • 아직까지는 메서드의 접근 제한자와 반환타입만 하고있다.
  • 그리고 추가적으로 객체인 class에 대하여 아주 조금 진도가 나갔다.

1. 객체의 캡슐화(encapsulation)

  • 관련된 필드와 메서드를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법(정보은닉)
  • 만일의 상황을 대비해서 특정 속성이나 메서드를 사용자가 조작할 수 없도록 숨겨놓은 것.
  • 외부에서는 공개된 메소드의 인터페이스를 통해 접근할 수 있다.

2. 객체의 다형성(polymorphism)

  • 사전적 의미 "다양한 형태로 나타날 수 있는 능력"
  • 같은 기능(method)을 호출하더라도 객체에 따라 다르게 동작하는 것
  • 상위 클래스의 동작을 하위 클래스에서 다시 정의하여 사용하는 것 또한 다형성으로 볼 수 있다.

3. 추가공부

  • static이란?
    앞서 포스팅한 것 처럼 스태틱 메모리에 할당되어 프로그램이 종료될 때 해제되는 것이다.
  • 다음과 같이 일반적으로 class는 static random, scanner처럼 new 연산을 통해 생성된 객체는 heap 영역에 생성된다. hear garbage collect가 꾸준히 청소를 해주지만 static은 그렇지 않기 때문에 계속 사용하다 보면 메모리에 싸이고 쌓여서 퍼포먼스에 영향을 줄 수 있다.
  • static 변수들을 따로 객체를 생성하지 않고 접근할수 있다는 장점을 가졌다. 또한 static 변수는 static method를 통해 접근하는 것이 바람직 하다.
  • 또한 static 변수들은 객체를 생성하지 않아도 되므로 어떤 class든 값을 공유하게 된다. 하지만 static을 설정하지 않은 객체 필드는 객체마다 값이 달라지게 된다.
  • static 메소드는 객체를 생성하지 않고 사용이 가능합니다. 반면 객체 메소드는 반드시 객체를 생성 후 메소드를 사용할 수 있습니다.

stack heap

  • 자바는 primitive type은 stack에 저장되고 reference type은 heap 영역에 저장된다.
  • 자동 저장 기간동적 저장 기간을 구분한다.
    로컬 변수는 자동 저장 기간을 가지며 컴파일러는 이를 stack에 저장한다.
    동적 메모리 할당(새로 생성)이 있는 개체는 일반적으로 heap이라고 하는 자유 저장소에 저장된다.
    가비지 컬렉션이 없는 언어에서는 heap에 있는 개체가 해제되지 않으면 메모리 누수가 발생한다.

stack

  • stack은 본질적으로 접근하기 쉬운 메모리로 단순히 항목을 잘 스택으로 관리한다. 크기를 미리 알고 있는 항목만 스택에 들어갈 수 있다. 예를들어 int, String, boolean

  • 언제 스택에 객체를 할당할 수 있을까?
    객체를 저장하기 위한 스택이 런타임 호출 스택과 동일하다는 것이다.
    스택 프레임으로 구성된 런타임 스택1.프로그램 실행2.함수 호출을 담당한다.
    스택 프레임에는 하나의 함수 호출에 대한 매개 변수, 반환 주소 및 로컬 변수와 같은 모든 데이터가 포함된다.
    스택에 할당된 개체는 이러한 로컬 변수의 일부이다.
    반환 주소는 함수가 반환된 후 실행되는 코드를 결정한다.

  • 컴파일 시 알려진 고정 크기의 개체만 스택에 할당할 수 있다.

  • 스택 프레임은 함수의 실행 시간 동안에만 존재하며, 스택 프레임의 객체도 마찬가지이다.
    스택 할당 개체로 인한 메모리 누수에 대해 걱정할 필요가 없다는 장점이 있지만, 함수에서 돌아오면 개체를 더 이상 사용할 수 없다.

heap

  • heap은 정확한 크기와 구조를 미리 결정할 수 없는 항목에 대한 메모리이다.
    객체와 배열은 런타임에의해 변경될 수 있기 때문에 힙으로 들어가야 한다.

  • heap은 런타임 스택과 완전히 독립적인 추가 스토리지라고 생각할 수 있습니다. 특별한 레이아웃이 없는 메모리이다.
    프로그램 실행과 관계없이 이 힙에 메모리를 요청할 수 있습니다.
    메모리를 할당할 때 시스템은 다른 어떤 것도 동일한 메모리를 사용할 수 없도록 하고 데이터를 무효화한다.
    힙의 개체는 메모리를 할당한 함수를 종료한 후에도 계속 유지된다.
    하지만 이제 힙의 메모리를 확보하는 것은 본인이 해야한다.
    그렇지 않으면 메모리 누수가 발생하게 된다.
    가비지 컬렉션이 있는 언어에서는 가비지 컬렉터가 힙의 메모리를 확보하여 메모리 누수를 방지한다.

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글