기억의 DataBase

OOP(Object Oriented Programming) - 객체지향과 Memory 본문

Java

OOP(Object Oriented Programming) - 객체지향과 Memory

Zester; 2019. 1. 14. 10:53
  • OOP(Object Oriented Programming) - 객체지향과 Memory
객체지향의 객체들은 Memory에 존재 >> 메모리에 존재하는 객체 Instance

Memory에 올라가기 전에 있는 객체의 틀 Class

※자바스크립트: 클래스 없이 객체가 존재

응집도 : 이름에 관련된 것을 가지고 있는 것 >> 이름만 봐도 내용이 파악되는 것(직관)

운영체제, 자료구조, 알고리즘등을 알아야 직관이 생김

  • 자바는 메모리 주소가 없다(C와는 다름)
Reference(참조변수)는 Instance(메모리에 존재)의 주소를 담고 있는 개념이 아님

Reference는 그냥 Instance의 리모콘 같은 것일뿐

  • Class는 하나지만, 해당 Class 때문에 Memory가 부족해서 Down 될 수 있다
하나의 Class로 복수개의 Instance를 만들면 Memory가 꽉 찬다

  • public static void main(String[] args) - 프로그램 시작점
java 프로그램은 CLASSPATH라는 환경변수로 잡힌 경로에서 Hello라는 클래스를 찾음

ex) 만약 CLASSPATH 값으로 c:/tmp라고 경로를 잡는다면 >> c드라이브 tmp에서 찾음 
    JVM은 Class를 어디서 찾는가? >> CLASSPATH로 잡혀있는 경로로 찾음

※윈도우는 대소문자 구분이 없지만, 리눅스는 있기 때문에 구분을 잘해줘야 함
(CLASSPATH는 의도적으로 대문자로 쓴 것)

  • static >> 메소드에 static이 있는 경우(특별 대우)
static이 붙어있는 클래스나 메소드는 실행가능하도록
new 연산자로 Instance화 하지 않아도, Memory에 올려줌(프로그램은 메모리에 올라가야 실행이 됨)

ex) cmd > java Hello

    만약 Hello Class가 다른 메소드를 가지고 있고,
    해당 메소드에 static이 붙어 있으면 그 메소드도 실행가능하도록 메모리에 올릴 것 
    JVM은 메모리에 올라간 클래스의 메소드 중에서 main(String[])을 찾음
    main 메소드를 찾아서 한줄한줄 실행

  • main(String[] args)
JVM이 문자열(String[] args)을 넣어줌
main메소드를 실행할 때 String을 발견
JVM은 String클래스를 찾아서 읽음
String이 static한 것들을 가지고 있는지 봄
>> Instance보다 Static이 먼저 메모리에 올라감(클래스가 발견되자마자 올라가므로)

  • System.out.println("Hello");
System을 발견 >> System CLASS의 필드에는 in, out 등이 static으로 되어 있음

class System{
        
    static PrintStream out= new aaa();
    public void String println();

}


'Java' 카테고리의 다른 글

생성자  (0) 2019.01.17
예외처리(Exception)  (0) 2019.01.17
객체지향  (0) 2019.01.16
package(디렉토리)와 중요 package  (0) 2019.01.14
JAVA Start  (0) 2019.01.11
Comments