JAVA/JAVA Basic 43

[JAVA ] GUI(Graphic User Interface)

JAVA코드를 짜고 이클립스를 실행하면 콘솔창이 뜬다. 하지만 우리는 프로그램을 '콘솔'로 사용하지 않는다. 아이콘을 '클릭'하면 '윈도우 창'이 열린다. 이와 같이 입출력 환경이 그래픽으로 구성된 환경을 두고 GUI 환경이라 부른다. 그럼 GUI란 어떤 일을 할까? GUI (Graphic user Interface) CPU는 연산이 목적이지 그림그리기가 목적이 아니다. 만약 CPU가 그림까지 그려버리면, 실제로 주목적인 연산을 처리하지 못하고 그림에만 매달리게 된다. 그래서 이 작업을 다른 장치에 맡겨두는데 그것이 그래픽카드(혹은 내장그래픽)다. OS는 사용자에게 그래픽을 제공한다. 사용자는 그래픽 안에서 각종 이벤트를 발생시킨다(키보드 입력, 마우스 클릭) . 그 이벤트를 OS는 2진코드로 바꾸어 C..

JAVA/JAVA Basic 2021.06.20

[JAVA ] 인터페이스(interface)

이전 포스팅에서 자동타입변환(Promotion)을 정리하며 '객체의 부품화' 이야기를 한 적이 있다. [ JAVA ] 다형성 한 번의 코딩으로 여러 개의 객체를 생성할 수 있는 원리가 '다형성(polymorphism)'이다. 상속과 같이 불필요한 코드 사용을 줄이는 중요한 개념이다. 개인적으로 다형성의 의미는 참조변수에 얼마 lordofkangs.tistory.com 객체의 부품화 자동타입변환이 없다면, 코딩을 할 때 car라는 변수가 아닌, Tesla(), Hyundae(), Toyota()의 '전용 타입'의 참조변수를 사용하여 코딩을 해야한다. Tesla t1 = new Tesla(); // 현대차로 바뀌면 t1.run(); // 얘도 수정 t1.accelerate(); // 얘도 수정 t1.stop..

JAVA/JAVA Basic 2021.06.20

[ JAVA ] 상속의 원리 : 메소드 동적 바인딩

메소드 오버라이딩을 공부하면서 궁금했다. 상속받은 메소드와 오버라이딩 된 메소드는 어떻게 구분이 되는 것일까? 출처 입력 메소드 호출 코드이다. Car car = new Car(); car.run(); 참조 변수 + .(도트연산자) + 메소드 이름 이 코드 안에 모든 답이 들어있다. 참조변수는 객체의 주소를 담고 있다. 이 말은 메소드 정보를 얻으려면 객체에 접근하라는 것이다. 하지만 메소드는 Heap영역이 아닌 메소드영역에 존재한다. 그렇다면 왜 참조변수를 통해, Heap영역에 접근하는 것일까? 그 이유는 객체 안에 가상 메소드 테이블(vtable)의 주소가 저장되어 있기 때문이다. 가상 메소드 테이블(vtable)은 클래스가 메모리를 할당 받을 때, 클래스 자신의 메소드를 비롯해 상속받은 모든 메소드..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] 자동 타입 변환(promtion) and 강제 타입 변환(casting)

다형성에 있어 자동 타입 변환은 중요한 개념이다. 자동타입변환은 부모 타입의 참조변수에 자식 객체의 주소를 넣는 행위를 뜻한다. Parent p1 = new Child(); 상속관계에서 자식클래스는 상속받은 데이터 + α 의 데이터를 갖고 있다. 하지만 자동타입변환을 하게되면 상속받은 데이터만을 사용할 수 있다. 왜 그럴까? 타입은 자료형이다. 우리가 자료형을 정의하는 목적은 '범위'를 설정해주기 위해서다. int는 –2,147,483,648 ~ 2,147,483,647 정수를 표현할 수 있다. 자료형은 범위를 설정하여 메모리 낭비를 방지한다. 예를들어, 자료형이 8바이트 double형 밖에 없다고 가정하면, 나는 정수만 사용할거라 4byte면 충분한데도 어쩔수 없이 8바이트를 사용해야된다. 이처럼 데이..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] 다형성

한 번의 코딩으로 여러 개의 객체를 생성할 수 있는 원리가 '다형성(polymorphism)'이다. 상속과 같이 불필요한 코드 사용을 줄이는 중요한 개념이다. 개인적으로 다형성의 의미는 참조변수에 얼마나 다양한 생성자를 받을 수 있냐? 출처 입력 라고 생각한다. 참조변수란 Heap영역에 생성된 객체의 주소를 담는 변수다. 주소는 new(연산자)와 생성자()(피연산자)를 통해 산출된다. 그러므로 하나의 코드로 다양한 객체를 만든다의 의미는 한 가지 참조타입(클래스)의 변수에 얼마나 다양한 생성자를 담을 수 있느냐?의 의미인 것이다. 다형성은 기본적으로 2 가지 경우가 있다. 1. 한 가지 클래스 타입에 매개변수가 서로 다른 생성자 출처 입력 이 경우는 이전 포스팅에 구체적으로 다룬 적이 있다. [ JAVA..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] JAVA와 C언어의 차이

​ ​ ​ ​ 이것은 C언어로 작성된 한 개의 파일이다. ​ C는 한 개의 파일 안에 수 백, 수 천줄의 코딩을 한다. 별다른 경계점이 없다. 그냥 위에서 아래로 쭉 코딩한다. 파일을 분리하고 싶다면 자신이 원하는 부분을 분리해서 개발하면 된다. 이를 두고 '절차지향언어'라고 한다. ​ 하지만 JAVA는 엄격하다. 자바는 개발자 마음대로 개발하면 안 된다. 자바는 클래스 단위로 개발한다. ​ ​ 클래스가 100개가 있다면 그중 99개는 라이브러리 클래스이고 1개는 실행 클래스이다. 1개의 클래스를 '실행(RUN)시키고' 그때 그때 필요한 라이브러리 클래스를 로딩시킨다. ​ ​ C언어 로딩 ​ ​ ​ C언어 파일 로딩 ​ ​ C는 프로그램이 RUN되기 전에 C 실행파일을 위부터 아래로 쭉 읽으며 함수를 코..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] 상속(Inheritance)

상속을 공부하면서 JAVA를 조금 더 이해할 수 있었다. 상속의 목적은 불필요한 코드 사용을 줄이는데에 있다. '자동차' 클래스는 A라는 특징을 가진다. 테슬라도 자동차 브랜드이다. 그래서 테슬라는 A + α 특징을 가진다. 자동차가 테슬라뿐이라면 그다지 낭비가 되지 않겠지만, 자동차는 도요타, 현대, 기아, 볼보... 여러 브랜드가 있다. 브랜드마다 A라는 특징을 공통으로 갖고 이를 코드로 구현하면 중복되는 코드가 정말 많을 것이다. 이를 방지하기 위해 '상속'이라는 개념을 사용한다. public class Car { int speed; public void speedUp() { speed += 1; } public final void stop() { System.out.printl..

JAVA/JAVA Basic 2021.06.18

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

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

JAVA/JAVA Basic 2021.06.18

[ JAVA ] static 알아보기

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

JAVA/JAVA Basic 2021.06.18

[ JAVA ] 객체의 생성과 호출

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

JAVA/JAVA Basic 2021.06.18