JAVA/Java
-
자바의 리플렉션JAVA/Java 2020. 3. 28. 23:37
자바의 리플렉션은 구체적인 타입을 알지 못해도 그 클래스의 메서드, 타입, 변수 등을 접근할 수 있도록 해주는 자바 API이다. 좀 더 자세히 말하자면 자바에서 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading) 하 여 생성자(Constructor), 필드, 메서드 등을 사용하고 변경하는 기법이다. 모든 클래스의 부모 클래스인 Object 타입으로 Car 클래스의 인스턴스는 담을 수 있지만 사용 가능한 메서드는 Object의 메서드와 변수들 뿐이고 car의 메서드는 사용할 수 없다. 위 예와 같이 구체적인 타입의 클래스를 모를 때 사용하는 것이 리플렉션이다. 그러면 구체적인 타입의 클래스를 모른다는 것은 언제 일까? 런타임에 지금 실행되고 있는 클래스를 가져와서 ..
-
자바의 추상 클래스와 인터페이스JAVA/Java 2020. 3. 28. 22:29
자바의 상속 개념에 항상 등장하는 것은 추상 클래스와 인터페이스이다. 어떤 공통점이 있고 어떤 차이가 있는지 항상 애매모호하고 따라서 내용을 정리해 보기로 했다. 추상 클래스는 하나 이상의 추상 메소드를 가지고 있는 클래스를 말하고 추상 메소드란 아직 구현되어 있지 않은 abstract으로 정의된 메서드를 말한다. 클래스에서 상속을 받는다면 추상 메서드가 있을 경우 모두 구현해주어야 한다. 추상클래스는 일반적인 메소드가메서드가 있을 수 있고 추상 메서드가 있을 수도 있다. 단 한 개라도 추상 메서드가 있 다면 그 클래스 앞에 abstract 으로 표기해야 한다. 추상 클래스는 일반 변수들을 가질 수 있다. 추상 클래스는 생성자를 가질 수도 있다. 인터페이스는 메소드들의 형태만 써놓은 것이며 역시 상속하는..
-
JVM (Java Virtual Machine) 의 구조JAVA/Java 2020. 2. 22. 17:43
JDK와 JRE 란? JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드(. class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. JRE (Java Runtime Environment): JVM + 라이브러리 자바 애플리케이션을 실행할 수 있도록 구성된 배포판 JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다 개발 관련 도구는 포함하지 않는다. (그건 JDK에서 제공) JDK (Java Development Kit): JRE + 개발 툴 JRE + 개발에 필요할 툴 바이트코드란? 바이트코드(Bytecode, portable code, p-code)는 특정 하드웨어가 아닌 가상 컴퓨..
-
Gradle 과 Maven 차이?JAVA/Java 2020. 1. 10. 08:50
Maven 과 Gradle 은 모두 빌드 관리 툴이다. 웹/앱 등 프로그래밍 개발이 발전되고 그에 필요한 라이브러리도 점차 증가했다. 이런 각각의 라이브러리들을 직접 다운받아 추가하는 방법은 너무 번거로워 졌다. 따라서 빌드 관리 툴이 등장하는데 프로젝트를 진행하며 라이브 러리의 버전을 동기화하기 위해 등장하였다. 초기 JAVA의 빌드 도구는 Ant라는 빌드 툴이였고 그 이 후 Ant의 불편함등을 해소 하기 위해 Maven이 등장하게 되고 이런 Ant와 Maven의 장점을 모아 등장한 것이 Gradle 이다. Maven 이란? 빌드를 쉽게해주고 pom.xml을 이용한 정형화된 빌드 시스템을 제공한다. 뛰어난 프로젝트 정보를 제공한다. 개발 가이드 라인을 제공한다.. 새로운 기능을 쉽게 설치할 수 있고 업..
-
String과 StringBuffer, StringBuilder 클래스 차이JAVA/Java 2020. 1. 10. 02:45
우선 String과 StringBuffer, StringBuilder의 차이를 알아보자. String은 문자를 수정하려면 지우고 다시 새로운 문자열을 리턴한다. 문자열 연산이 많아질수록 기능이 떨어진다. 따라서 문자열을 변경하는 작업이 많을 경우 String 클래스보다는 java.lang에 StringBuffer or StringBuilder 클래스를 사용하자. 이 두 클래스는 내부 버퍼에 문자열을 저장해 두고, 그 안에서 추가,수정,삭제 작업을 하도록 설계되어있다. 따라서 String 처럼 새로운 객체를 만들지 않고도 문자열을 조작할 수 있다. 그렇다면 StringBuffer와 StringBuilder의 차이는 뭘까? 둘의 사용 방법은 동일하지만 차이는 멀티 스레드 환경에서 사용할 수 있도록 동기화가 ..