Java 52

MacOS에서 Homebrew로 Java 설치하기

M1 등장 이후 맥북 시스템 생태계는 Intel 기반 시스템과 Apple Silicon (M1, M2, etc) 기반 시스템으로 나뉘게 되었다. 즉, 이제는 패키지 배포 시에도 M1용과 Intel용을 각각 구분해서 올려야 하고, 설치를 할 때에도 잘 구분을 하여야만 하게 되었다. 기존에 안그래도 복잡한 자바의 설치가 Oracle의 저작권 관련 소송과 M1 등장 이후 더욱 복잡해졌다. 특히 2015년 맥북 프로와 같이 예전 모델을 쓰는 사용자들에게는 더욱 상황이 안 좋아졌다. 이러한 사용자들을 위해 macOS 기반 패키지 관리자인 Homebrew의 사용은 맥북을 사용하는 개발자들에게는 필수가 되어 버렸다. 기존에도 필수였던 홈브루의 사용 필요성이 더욱 올라가게 된 것이다. 홈브루로 자바를 설치하는 방법은 ..

Java 2022.09.15

Java JIT compiler

Java JIT compiler 1. JIT 컴파일러란? 자바 파일을 컴파일하게 되면 ".class" 확장자를 가진 클래스 파일이 생성된다. 이 클래스 파일은 자바 바이트 코드(java byte code)로 이루어져 있다. 가상 기계(Virtual Machine)을 사용하는 언어에서의 가장 중요한 점으로는 컴파일된 바이트 코드를 어떻게 하면 더 효율적으로 빠르게 실행시킬 수 있을지에 대한 점이다. 자바 바이트 코드는 인터프리터 언어(interpreter language)이다. 한줄씩 읽고 해석하고, 그에 해당하는 기능을 실행시키는 인터프리터 언어이기에 비효율적으로 보일 수 있겠지만, 가상 머신에서 돌아가는 바이트 코드들은 매우 저수준의 인터프리터 언어이기에 자바스크립트 한줄에 비하면 자바 바이트 코드 한..

Java/JVM 2018.07.28

자바에서 객체의 타입을 확인하는 법

자바에서 객체의 타입을 확인하는 법 자바로 코딩을 하다보면 각 객체들의 타입을 체크해야만 할 때가 있다. 그럴 때에 사용하는 것이 바로 instanceof 연산자이다. instanceof 연산자의 구문은 다음과 같다:객체_레퍼런스 instanceof 클래스_타입 instanceof는 이항 연산자로서 주어진 레퍼런스 변수가 가리키는 객체가 주어진 클래스의 타입인지 확인을 한 후, 그 결과에 해당하는 boolean을 반환한다. i.e.class Person {}class Student extends Person {}class Researcher extends Person {}class Professor extends Researcher {} public class InstanceofExample { publ..

Java/Java 기본 2018.07.09

객체의 타입 변환 : 업캐스팅과 다운캐스팅

객체의 타입 변환 : 업캐스팅과 다운캐스팅 캐스팅(casting)이란 개발자가 프로그램 코드로 행하는 강제 타입 변환이다. 자바에서 캐스팅은 업캐스팅과 다운캐스팅의 두 가지가 있다. 1. 업캐스팅(upcasting) - 서브 클래스의 레퍼런스를 슈퍼 클래스 레퍼런스에 대입- 슈퍼 클래스 레퍼런스로 서브 클래스 객체를 가리키게 되는 현상 서브 클래스는 슈퍼 클래스의 모든 특성을 상속받는다. 따라서 서브 클래스는 슈퍼 클래스로 취급될 수 있다. 예를 들면, 사람을 생물이라고 불러도 되는 것과 같다.서브 클래스 객체가 슈퍼 클래스 타입으로 변환되는 것을 업캐스팅(upcasting)이라고 한다. i.e.class Person {String name;String id; public Person(String nam..

Java/Java 기본 2018.07.09

자바의 장단점

자바의 특징 1. 자바의 장점? 1) 완벽한 캡슐화 이 캡슐화에 의해 프로그램 자체의 보안성 등이 더욱 강화된다. 2) 휴대성(portability) 자바 응용 프로그램은 JVM에 종속적이지만 플랫폼 독립적이다. 따라서, 한번 작성을 하면 JVM이 있는 어느 플랫폼에서든지 작동을 한다. 3) 타입 데이터 타입이 있고 타입 변환이 불가능하다는 것은 자바의 강한 장점이다. 실제로, 코딩을 하다 보면 데이터 타입이 변하지 않았으면 하는 상황들이 생기곤 한다. 특히 주어진 데이터를 분석하는 데이터 과학 분야에서는 타입 변환이 안되는 이 자바의 특성이 매우 중요하다고 한다. 4) 객체 지향적 특징 객체 지향 언어인 자바는 절차 지향 언어보다 더 다양하고 창의적인 논리적 디자인이 가능하다. 5) 쉽게 배울 수 있다..

Java/Java Tips 2018.07.04

상속과 생성자

상속과 생성자 1. 서브 클래스와 슈퍼 클래스의 생성자 호출 및 실행 관계 상속 관계에 있는 서브 클래스와 슈퍼 클래스는 각각 생성자를 가지고 있다. 두 생성자들의 관계에 대해서 일반적으로 혼동하는 부분에 대해서 알아보도록 하자. Q1. 서브 클래스의 인스턴스가 생성될 때 서브 클래스의 생성자와 슈퍼 클래스의 생성자가 모두 실행되는가? 아니면 서브 클래스의 생성자만 실행되는가? A1. 둘 다 실행된다. 생성자는 인스턴스를 초기화할 목적으로 사용되므로 서브 클래스의 생성자는 서브 클래스 내의 멤버를 초기화하거나 필요한 초기화 작업을 수행할 필요가 있고, 슈퍼 클래스의 생성자는 슈퍼 클래스의 멤버를 초기화하거나 필요한 초기화 작업을 수행할 필요가 있기 때문이다. Q2. 서브 클래스의 인스턴스가 생성될 때 서..

Java/Java 기본 2018.07.03

상속과 접근 지정자

상속과 접근 지정자 자바의 접근 지정자에는 총 4가지 종류가 있다. 그렇다면, 슈퍼 클래스 멤버에 선언한 4가지 유형의 접근 지정자에 대해 다른 클래스에서 어떤 접근이 허용되는지 알아보도록 하자. - private슈퍼 클래스의 멤버에 private 접근 지정자가 지정되면 서브 클래스라도 자기 멤버 같이 직접 사용할 수 없다. -protected슈퍼 클래스의 protected 멤버는 두 가지 상황에서 접근을 허용한다. 1) 같은 패키지에 속한 다른 클래스에 접근을 허용한다.2) 같은 패키지든 다른 패키지든 상속을 받는 서브 클래스에 접근을 허용한다. -public슈퍼 클래스의 멤버가 public이면 서브 클래스뿐만 아니라 어떤 클래스에서도 접근할 수 있다. 같은 패키지에 있든 다른 패키지에 있든 상관없다...

Java/Java 기본 2018.07.03

서브 클래스의 객체와 멤버 사용

서브 클래스의 객체와 멤버 사용 A라는 클래스를 상속받는 클래스 B가 있다고 하자. 클래스 A로 객체 a를 만들고, 클래스 B로 객체 b를 만들었을때, 객체 a는 오직 A의 멤버 변수와 멤버 메소드만을 사용할 수 있다. 그에 반해, 객체 b는 클래스 B의 멤버 변수와 메소드 뿐 아니라 클래스 A의 멤버 메소드와 변수까지 사용할 수 있다. 상속을 받았기 때문에, 클래스 B는 클래스 A의 멤버를 모두 가지기 때문이다. 서브 클래스 객체를 생성하면, 그 안에는 서브 클래스의 멤버들 뿐 아니라 슈퍼 클래스의 멤버들도 함께 생성된다.

Java/Java 기본 2018.07.03

JVM이란?

JVM이란? JVM을 어떻게 정의할 것인가 고민하기에 앞서 기본적 JVM 원어부터 알아보자. JVM은 그 이름에서 자신의 모든 특성을 담고 있다. JVM은 먼저 Java에서 출발한다. 그리고 Virtual이라는 단어를 통해서 알 수 있듯이, JVM은 물리적인 형태가 아닌 소프트웨어로서 하나의 개념으로 존재한다. 그리고 JVM은 독자적으로 작동할 수 있는 메커니즘과 구조를 가지고 있다. 즉, 하나의 축약된 컴퓨터와 같은 의미에서 기계라는 의미의 단어 "Machine" 이 조합된 것이다. 결국 JVM은 정의된 스펙을 구현한 하나의 독자적인 프로세스 형태로 구동되는 Runtime Instance라고 할 수 있다. 따라서 JVM의 역할은 개발자들이 작성한 자바 프로그램이나 웹 애플리케이션 서버 등을 구별하지 않..

Java/JVM 2018.07.02

상속 선언

상속 선언 자바에서는 슈퍼 클래스로부터 상속받은 서브 클래스를 선언할 때 extends 키워드를 사용한다. i.e.public class Person {...} public class Student extends Person {//Person을 상속 받는 클래스 Student 선언...} public class StudentWorker extends Student {//Student를 상속 받는 클래스 StudentWorker 선언...} Student 클래스는 Person 클래스의 특성을 물려받으므로 Person 클래스에 선언된 필드나 메소드를 다시 반복 선언할 필요가 없으며, 새롭게 추가된 특성을 표현하는 필드나 메소드만을 선언하면 된다. StudentWorker가 Student를 상속받으면 Pers..

Java/Java 기본 2018.07.02