Dev 226

[ JAVA ] 싱글톤패턴(singleton) 그리고 final

static의 목적은 '공용성'이다. 그리고 static을 활용한 패턴 중 하나가 '싱글톤 패턴'이다. 그러므로 static을 토대로 만든 싱글톤 패턴의 목적 또한 '공용성'이다. 무분별한 객체 생성을 막고 단 한 개만 생성해서 이를 공유하는 것이다. 사무실에 프린터를 한 대만 설치하는 개념이라 생각하면 된다. 직원마다 프린터를 설치하면 돈 낭비이듯, 공용 가능한 객체를 여러 개 생성하면 메모리 낭비이다. 싱글톤 패턴 일단 무분별한 객체 생성부터 막아야 한다. 객체생성은 new 연산자 + 생성자() 로 이루어진다. 생성자()를 private로 설정하여 접근제한을 둔다. public class Singleton { private static Singleton slt = n..

Dev/JAVA 2021.06.18

[ JAVA ] static 알아보기

JAVA는 객체지향언어다. 객체들은 데이터를 주고받으며 대화를 한다. 하지만 데이터 중에서도 '공용성'이 높은 데이터들이 있다. 예를들어 테슬라가 만들어내는 차는 모두 '전기차'이다. 그러므로 테슬라가 만들어내는 차들은 [ Strig cartype = "Electronic"; ] 속성을 가져야한다. 테슬라가 차 100대를 생성했다 가정하면 컴퓨터 메모리 Heap 영역에 100대의 객체가 생성될 것이다. 이는 메모리에 cartype 필드 또한 100개가 생성된다는 의미다. 즉, 100개의 cartype 필드 안에는 모두 똑같은 "Electronic" 문자열 리터럴을 가리키는 주소 데이터가 저장된다는 의미다. 얼마나 비효율적인가? 이와 같이 공용성이 높은 데이터는 static처리를 해서 쓸데없는 메모리 낭비..

Dev/JAVA 2021.06.18

[ JAVA ] 객체의 생성과 호출

객체 생성 연산자 : new 객체 접근 연산자 : . (도트) 이 두 가지만 알아도 객체의 많은 부분을 알 수 있다 생각한다. new 객체는 Heap 영역에 생성된다. Heap 영역에 객체생성을 지시하는 연산자가 new이다. Studuent [참조타입] std [참조변수] = new Student() [생성자]; 참조변수는 참조타입에 맞는 객체의 주소를 저장하는 변수다. new 연산자는 참조타입에 맞는 클래스의 생성자를 토대로 Heap 영역에 객체를 생성한다. 그리고 해당 객체의 주소를 return하여 = 연산자를 통해 참조변수에 저장한다. 생성자 생성자는 일반적으로 매개변수를 받아 객체의 필드값을 초기화하는데 사용된다. 생성자는 리턴타입이 없고 클래스의 이름과 동일하게 설정된다. 생성자는 굳이 코드로 ..

Dev/JAVA 2021.06.18

[ JAVA ] 열거타입(enumeration type)

열거 타입은 이름마저 생소하다. 열거타입을 사용하는 이유는 무엇일까? 간단히 예를 들어보겠다. '김철수'라는 사람이 있다. 철수는 회사에서 '김대리'라 불리지만 집에서는 '아빠'라 불린다. 그리고 술만 마시면 쩔뚝거리며 걸어서 친구들 사이에서는 '김철뚝'이라고 불린다. 이렇게 '김철수'라는 사람은 상황에 따라 불리는 이름이 다르다. 열거 타입은 하나의 대상이 상황에 따라 다른 값으로 바뀔 필요가 있을 때, 사용하면 간편한 코딩을 할 수 있게 도와준다. 대표적으로, 스레드의 상태(State)는 열거 타입으로 표현된다. 스레드는 한 개지만, 스레드가 상황에 따라 표현되는 상태는 NEW, RUNNABLE, WAITING, TIMED_WAITING, BLOKED, TERMINATED 와 같이 다양하다. 이처럼 ..

Dev/JAVA 2021.06.18

[ JAVA ] String args[] 존재 이유

public class StringArgs { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[2]); } } String[] args는 무엇일까? args는 arguments의 약자로 '인수'(파라미터)라는 의미다. String[] args의 존재 이유는 main 메소드의 static에서 찾을 수 있다. main 메소드는 static으로 선언된 정적 메소드이다. 정적 메소드(Static) 클래스의 메소드 사용법은 두 가지로 나뉜다. 1. 객체 생성 후 메소드 사용 가장 기..

Dev/JAVA 2021.06.18

[ JAVA ] 참조타입(reference type)

자바 변수 타입에는 두 가지가 있다. 원시 타입(primitive) and 참조 타입(referece) 변수에 '값'을 넣으면 원시 타입이다. 변수에 '주소'를 넣으면 참조 타입이다. 변수에 주소를 넣는 이유가 무엇일까? 출처 입력 JVM은 메모리를 할당받고 메모리 영역을 크게 3가지로 나눈다. 메소드 영역은 객체 생성을 위한 설계도인 클래스를 저장한다. HEAP 영역은 그 클래스를 토대로 만들어진 객체를 저장한다. STACK 영역은 한 스레드(main())가 시작될 때 그 스레드의 흐름에 따라 생성되는 변수를 임시 저장한다. STACK 영역은 스레드가 시작되어야 메모리가 할당된다. 스레드가 얼마나 클지 언제 시작될지도 모르는 영역을 큰 영역으로 잡아놓으면 메모리 낭비다. 그러므로 STACK 영역은 크지..

Dev/JAVA 2021.06.18

[ JAVA ] 이클립스 Failed to init ct.sym 에러 해결 (feat. JAVA SE15) (프로젝트 생성 에러)

이클립스를 설치하고 프로젝트를 생성하자마자 프로젝트에 에러가 난다. Failed to init ct.sym ~~ 이 경우는 이클립스가 JRE 경로를 제대로 인식하지 못해서 발생한다. '이클립스 인스톨러'로 이클립스를 설치하는 과정에서 JVM 경로를 설정할 때 jdk15로 경로를 설정하면 에러가 발생한다. 하지만 jdk14로 경로를 설정하면 에러가 발생하지 않는다. jdk15가 2020.9월에 나온 최신 버전이라 이클립스 인스톨러로 설치 시 호환에 문제가 있는게 아닐까 생각한다. (이유를 모르겠다...) 어쨌든 이런 경우 해결할 수 있는 방법이 세 가지가 있다. 첫 번째 방법 Window 탭에 들어가 Prefereces로 들어간다. java 속성에 installed JREs를 클릭하면 이런 창이 나온다. ..

Dev/JAVA 2021.06.18

[ JAVA ] 이클립스 설치하기

이클립스 설치하기 JDK 설치와 설정을 완료했으면 이제 '이클립스'를 설치해보자. 우리는 메모장을 갖고 자바코드를 작성하여 JDK를 실행시켰다. 하지만 언제까지 메모장을 이용할 수는 없다. 개발자가 코드를 작성하는데 여러가지 편이를 제공하는 통합개발환경(IDE)을 사용할 시간이다. 이클립스( Elicpse ) https://www.eclipse.org/ 위 링크로 들어가준다. Download 버튼을 연달아 클릭하여 이클립스 인스톨러를 설치한다. 인스톨러는 이클립스와 더불어 '오픈된 JRE'를 함께 다운로드를 가능하게 한다. 이는 굳이 오라클에서 JDK를 따로 설치하지 않고도 이클립스 설치만으로 자바 프로그래밍을 가능하게 만든다. JRE(Java Runtime Envrionment)란 무엇인가? (아시는 ..

Dev/JAVA 2021.06.18

[ JAVA ] JDK 사용하기 2

JDK에는 W.O.R.A 라는 개념이 있다. Write Once Run Anywhere JDK의 가장 대표적인 개념이다. Write Once Run Anywhere 출처 입력 C 컴파일러는 JDK와 다르다. C는 컴파일되면 바이너리(Binary) 코드 실행파일이 생성된다. 바이너리 코드(10001011...)는 CPU가 이해하는 언어다. (바이트 코드는 JVM이 이해하는 언어다.) 즉, C컴파일러는 컴퓨터 환경과 직결되는 바이너리 코드를 실행파일로 만든다는 의미다. 이를 다시 말하면 Window에서 작성된 바이너리 코드 실행파일은 Linux에서 작동이 안 된다는 말이다. 즉, 어디서든(Anywhere) 실행(Run)되지 않는다는 것이다. 이런 단점을 보완하고자 JDK는 컴파일과 OS사이에 JVM이라는 가..

Dev/JAVA 2021.06.18

[ JAVA ] JDK 사용하기 1

JAVA 언어 코딩을 위한 준비물은 JDK와 이클립스다. JDK는 자바 개발 도구 이클립스는 IDE 통합 개발 환경이다. JDK(Java Development Kit) JDK는 자바 언어로 만들어진 코드를 실제 프로그램으로 만드는 도구다. https://www.oracle.com/java/technologies/javase-downloads.html JDK는 위 링크로 들어가 설치를 하면된다. (최신의 JAVA SE15와 기존의 JAVA SE8 중 하나 선택) JDK 설치를 완료하면 JDK를 사용해보자. 바탕화면에 임시로 폴더 하나를 만든다. 간단히 메모장에 자바코드로 .java 파일을 만들어 바탕화면 폴더에 저장한다. cmd 창을 열어 cd 명령어(Change Directory)를 통해 JAVA파일이 ..

Dev/JAVA 2021.06.18