Java (42) 썸네일형 리스트형 객체지향 특징 - 다형성 다형성이란 어떤 것이 다른 형태로 발생하는 상황을 설명한다. 동일한 인터페이스로 서로 다른 유형의 객체에 접근 할 수 있는 개념을 설명한다. 다형성 종류 정적 또는 컴파일 다형성 동적 다형성 정적 다형성 Java 를 사용하면 동일한 이름을 사용하지만 매개 변수가 다른 메서드를 여러개 구현할수있다. 이걸 메서드 오버로딩이라 하고 정적 형태의 다형성을 나타낸다. 동적 다형성 동적 다형성은 컴파일러가 실행 된 메서드를 결정 짓게 하지 않는다. JVM 런타임에 결정이 된다. 하위 클래스는 상위 클래스의 메소드를 오버라이딩 할 수 있는데 동일한 이름과 매개변수를 공유하지만 다른 기능을 제공 할 수 있다. 이게 다형성의 한 형태라 볼 수 있다. late binding 하위 클래스가 상위클래스 타입으로 생성된 경우를.. 객체지향 특징 - 상속 객체지향 상속이란 속성 및 메서드 집합을 공유하는 클래스 계층 구조를 위해 클래스에서 파생할 수 있는 이론이다 상속 계층 선언 자바에서 클래스는 하나의 다른 클래스에서만 파생될수있다 이 클래스를 수퍼 클래스 또는 상위 클래스라고 한다. 이걸 상속 받은 클래스를 하위 클래스 또는 자식 클래스라고 한다. extends 사용해서 하위 클래스를 확장시킨다. 상속 접근자 상속 받은 하위 클래스는 상위 클래스의 public 또는 protected 접근자만 사용할 수 있다. 만약 서브 클래스와 수퍼 클래스가 같은 패키지 내부에 있다면 패키지 전용 접근자도 사용할 수 있다. super 키워드를 사용해 수퍼 클래스의 메서드를 호출하는데 사용할수있다. 메서드 재정의 상속은 슈퍼클래스의 모든 public, protected.. 객체지향 특징 - 캡슐화 캡슐화란 하나의 유닛(class)에 데이터와 메소드를 함꼐 번들링 해둔 걸 뜻한다. 이 개념은 내부 state를 밖에 숨기는 정보은닉 개념으로도 쓰인다. 객체 외부에서 볼 수 없는 state 를 두고 여기에 접근 할 수 있는 메소드를 제공한다 내부 상태에 대한 접근을 제어 할 수 있다. 접근 수정자 캡슐화를 가능하게 자바에서는 private no modifier protected public 을 제공한다. 표로 설명을 대신한다. 객체지향의 특징 - 추상화 추상화 추상화의 주 목적은 불필요한 디테일 정보들을 사용자로부터 숨기는 것이다. 사용자는 복잡한 로직을 이해할 필요 없이 사용할 수 있다. 예를들어보자 커피가 먹고 싶어서 커피머신에서 스위치를 눌러서 커피를 만들었다고 쳐보자 여기서 커피머신으로 커피를 만든것은 좋은 추상화 예이다. 커피머신의 사용법만 알면 되고 커피머신이 어떻게 커피를 추출하는지는 알필요가 없다. 이걸 자바에서 똑같이 구현해보자 OOP 추상화 커피머신은 어떤 커피를 선택하냐에 따라서 어떻게 커피 빈을 그라인드 할지 결정을 한다 커피 셀렉션은 enum 형태로 각 종류의 커피가 들어있고 우린 단순히 커피머신을 만들때 커피빈과 어떤 커피를 만들지 생성자에서 만들기만 하면된다. 그럼 brewCoffee 를 통해 우리가 선택한 커피가 return.. Garbage Collection 출처 : d2.naver.com/helloworld/1329 가비지 컬렉션 과정 GC 를 알기 전 stop-the-world 를 알아보자 stop-the-world 란 GC 를 실행하기 위해 JVM이 어플리케이션을 멈추는 것이다. stop-the-world 가 발생하면 GC 실행 스레드를 제외하고 모든 스레드가 작업을 멈춘다. GC가 완료된 후에 다시 시작한다. 대개의 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다. 자바는 개발자가 코드로 메모리를 명시적으로 해제하지 않기 때문에, 가비지 컬렉터가 알아서 객체를 찾아 지운다. HotSpot VM 에서는 크게 2가지로 물리적 공간을 나눴다. Young 영역과 Old 영역이다. Young 영역: 새롭게 생성된 객체는 대부분 여기에 위치. .. Stack - 메모리 관리 Stack 에는 힙 영역에 객체 타입의 데이터들에 대한 참조를 위한 값들이 할당된다. 또한 primitive 타입의 데이터들도 할당된다. 이 primitive 타입 데이터들에는 참조값이 아닌 실제 값을 저장한다. Stack 메모리는 스레드 하나당 하나씩 할당이 되고 다른 스레드에선 접근할 수 없다. 이 Stack 이 어떻게 활용되는지 봐보자 argument 변수가 있다 argument 에 새로운 메소드를 호출해서 값을 return 받는다 생각해보자 함수 내부에서 param 변수에 argument 를 저장하고 이 변수에 4를 곱한 변수를 tmp에 저장한다. 그 후 2를 나눈 값을 return 하면 저렇게 메소드에서 발생하는 부분이 새로 프레임으로 생성이되고 저 부분에서 이전 메소드의 매개변수은 argume.. JVM 과 JIT 컴파일러 컴파일러로 java 파일이 class(바이트코드) 파일로 변경 되는 걸 봤다. 그리고 이 class 파일은 JVM 에서 읽을 수 있다. 간단하게 보면, JDK 내부에는 컴파일러, 의존관계 분석 등 개발에 필요한 도구들이 있고, 이 JDK 가 class 파일을 만들게 되면 JRE 에는 실행에 필요한 자바 실행 명령, 클래스 로더와 바이트 코드 실행에 필요한 여러 라이브러리를 제공하고 있다. 이걸 이용해 바이트 코드를 실행하게 되면 JVM 에서 실행을 하게 된다. JVM 은 OS 에 독립적이여서 바이트 코드를 OS 에 맞추고 ,언어를 OS 에 맞게 변경하는데 이떄 사용하는게 인터프리터와 JIT 라고 보면 된다. 이제 이 바이트 코드를 어떻게 실행하는지 알아보기 위해 JVM 과 JIT 에 대해 알아보자 JVM.. 컴파일러 Java 는 jvm 에서 class 파일을 읽기전에 java 파일을 class 파일로 변경해주는 컴파일러 과정을 진행한다. 이 컴파일러가 어떻게 동작하는지 봐보자 컴파일러 동작 자바 컴파일러는 총 4가지 정도의 과정을 진행한다. 어휘 분석 구문 분석 의미 분석 중간 코드 생성 어휘 분석 .java 코드는 키워드와 리터럴, 오퍼레이터 등으로 구성이 되어있는데, 여기서 키워드는 public, class 등 예약어 들이고, 리터럴은 문자열 등, 그리고 오퍼레이터는 + - 같은 연산자 들로 구성된다. 이런 것들을 어휘소라고 하는데 이걸 모두 수집해 하나의 스트림으로 만들면 이게 토큰 스트림이 된다. 구문 분석 구문 분석은 이 토큰 스트림을 문법에 맞는지 확인을 하는 과정이다. 문법이 틀리면 Syntax erro.. 이전 1 2 3 4 5 6 다음