목록JAVA (5)
미래학자
일반적으로 클래스를 통해 객체를 생성했다. 우리는 코딩할 때 클래스에 명시된 필드와 메소드를 알고 있기 때문에 지금까지 클래스의 메소드 또는 필드를 이용하는데 아무런 불편함이 없었다. 이전 시간에 객체를 생성할 때 클래스의 메타데이터를 먼저 읽는 것을 이해했다. 이 메타데이터에는 클래스의 필드, 메소드 등의 정보를 담고 있다. 이런 메타데이터를 통해 해당 클래스의 객체를 생성할 수 있다. 이렇게 한 번 설명해보겠다. 오류가 있을 수 있으니 잘못된점이 있다면 지적해주시면 정말 감사할 것이다. 타조, 앵무새, 비행기, 사자, 뻐꾸기, 말 이렇게 6가지 클래스가 있다고 하자. 이 중 fly() 함수가 있는 클래스는 타조, 앵무새, 비행기, 뻐꾸기다. 새(abstract class) - 앵무새, 타조, 뻐꾸기 ..
자바 프로그램은 한 개 혹은 그 이상의 클래스들의 조합으로 실핸된다. 그리고 실행 시 모든 클래스 파일드이 한 번에 JVM 메모리에 로딩되지 않고 요청되는 순간 로딩된다. 자바의 클래스 로더가 이런 역할을 수행한다. 클래스 로더란 '.class' 바이트 코드를 읽어 들여 class 객체를 생성하는 역할을 담당한다. 즉, 클래스 로더는 클래스가 요청될 때 파일로부터 읽어 메모리로 로딩하는 역할을 하며 자바 가상 머신의 중요한 요소 중 하나다. ※ 클래스 로더가 classpath라는 환경 변수에 등록된 디렉토리에 있는 모든 클래스들을 먼저 JVM에 로딩한다. JVM에 로딩된 클래스만이 JVM에서 객체로 사용할 수 있다. 클래스 로딩은 클래스를 로딩하는 시점 또는 실행 중간에도 할 수 있다. 자바의 클래스 로..
JVM 내부 구조를 파헤쳐보자. 우선 그림을 통해 전체 구조를 살펴보자. 클래스 파일 : 개발자가 자바 소스를 프로그래밍하면 확장자가 '.java' 이며 자바 컴파일러에서 컴파일 과정을 거치면 '.class'파일이 생성된다. 이 클래스 파일을 JVM에서 실행 가능하다. 이 클래스 파일들이 서로 유기적으로 동작하면서 하나의 프로그램이 수행하게 된다.클래스 로더 서브 시스템 : 자바 클래스 파일들은 OS에서 직접 동작하는 것이 아니라 JVM 위에서 동작한다. JVM은 실행할 클래스 파일을 읽고, JVM 메모리에 올려놓는 과정이 필요한데 이 과정을 클래스 로딩이라고 한다.JVM에서 실행할 클래스 파일의 내부 구조를 분석한다. 어떤 메소드가 있는지, 어떤 변수가 선언되어 있는지 그리고 각각의 성격은 어떤지 모두..
아마 자바를 사용하다보면 한 번쯤은 Builder 패턴과 마주쳤을 것이다. 나의 경우 안드로이드 개발을하면서 UI 컴포넌트 부분에서 자주 보았다. 예를들면, 자바에 다이얼로그창을 띄울 때 이 Builder 패턴을 사용하면, 다이얼로그의 전체적인 레이아웃, 제목, 내용, 마진, 효과, 등등 여러가지 파라미터를 효과적으로 전달 할 수 있다. 또, 전혀 값을 넣지 않아도 디폴트 값이 있기 때문에 객체를 생성할 때, 잘못된 내용으로 만들 가능성이 적어진다. { //빌더 패턴 public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int..
Java를 배울 때 객체 지향의 특성을 제대로 이해하지 않은 상태로 몇 년이 지났다.학교에서 열심히 배우지 않은 탓에 늦게 나마 제대로 공부 하고 싶어서 Java 공부를다시 시작했다. 사실, 이전에 Head First 에서 나온 JAVA 책을 보았다. 그 책은 초보자가 보기에 좋은책이고 객체지향의 개념을 간단히 알려준다. 반면, Effective Java는 초보자용이 아닌 책이고, 살짝 보기에 디자인 패턴 내용도 보이는게제목 그대로 효율적인 자바를 사용하는 방법에 대해 알려주는 것 같다. 이러한 것들은좋은 코드에 적용되는 스킬이라고 볼 수도 있는데, 좋은 코드를 많이 보는 것이 좋긴 하지만이 책과 같이 한 번에 잘 정리해주는 것도 참 좋은 것 같다. 아래 블로그는 책 내용을 잘 정리 해 주신 황군'str..