본문 바로가기

자바

(10)
18_자바 System 클래스 : exit 메소드, 프로그램 실행 소요 시간 구하기 00. System 클래스 -- java.lang.System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. -- System 클래스의 모든 필드와 메소드는 static으로 구성되어 있다. 01. exit 메소드 -- 개발을 하다보면 JVM을 강제로 종료시킬 때가 있는데, 이 때 exit 메소드를 사용한다. -- int형 매개값을 지정하도록 되어있는데, 이 값을 종료상태값이라고 부른다. -- 일반적으로 정상 종료일 경우 0으로 지정하고 비정상종료일 경우 다른 값을 지정한다. -- System.exit()이 실행되면 보안관리자(Security Manager)의 checkExit() 메소드가 자동 호출되는데, 이 때 종료상태값을 조사하여 특정 값이 입력되었을 때만 JVM이 종료되도록 할 수 있다..
17_자바 Objects 클래스 : 객체 비교(Comparator<T>) 00. 자바의 java.util.Objects 클래스를 최상위 클래스인 java.lang.Object 클래스와 헷갈리지 말자. 01. Comparator 인터페이스 구현을 통한 객체비교 - Comparator 인터페이스를 구현함으로써 특정 클래스 타입의 객체들을 비교할 수 있다. - Comparator 인터페이스를 구현하는 클래스는 int compare(T a, T b); 메소드를 재정의해야 한다. 먼저 실행클래스 내부에 Person클래스를 만들어줬다. Person 클래스의 필드는 주민번호 뒷자리, 나이, 키로 구성되어 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class ComparePersonExample { public static void ..
16_자바에서 객체 복제하기 : 얕은 복제와 깊은 복제 01. 객체 복제란? - 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는 것. - 신뢰하지 않는 영역으로 객체를 넘길 때 객체를 복제해서 넘기면 원본 객체를 안전하게 보호할 수 있다. - 자바에서는 원본 객체가 java.lang.Cloneable 인터페이스를 구현하도록 함으로써 객체복제를 허용할 수 있다. 02. 얕은 복제 (thin clone) - 단순히 필드값을 복사해서 객체를 복제하는 것 - 필드가 기본 타입일 경우 값의 복사가 일어나고, 필드가 참조타입일 경우에는 객체의 번지가 복사 된다. - Object 클래스의 clone() 메소드를 사용하되, 리턴타입이 Object이므로 적절한 타입으로 형변환하여 사용하도록 한다. - clone() 메소드는 CloneNotSupportedEx..
12_인터페이스(interface) : 인터페이스의 구성, 다중인터페이스 01. 인터페이스란 - 객체의 사용 방법을 정의한 타입 - class 키워드 대신 interface 키워드가 붙으며, 인터페이스를 구현하는 클래스는 implements 키워드를 사용함 - 개발코드와 객체가 서로 통신하는 접점이다. : 개발코드가 인터페이스의 메소드 호출 >> 인터페이스가 객체의 메소드 호출 - 인터페이스가 중간 역할을 해 주기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없다 --> 개발코드를 수정하지 않고도 사용하는 객체를 변경할 수 있다. 1 2 3 4 5 6 7 8 9 10 interface 인터페이스명 { //상수 타입 상수명 = 값; //추상 메소드 - 무조건 오버라이딩 필요... 번거롭다. 타입 메소드명(매개변수,...); //디폴트 메소드 - 인터페이스에 선언되었으나 구..
11_상속(inheritance) : 다형성(Polymorphism), 자동형변환(Promotion), 강제형변환(Casting), instanceof 연산자, 추상클래스(abstract class) 01. 다형성 - 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질. 하나의 타입에 여러 객체를 대입하여 만든다. 02. 자동형변환(Promotion)과 강제형변환(Casting) - 부모 타입에는 모든 자식 객체가 대입될 수 있다. - 부모 타입으로 자동형변환된 자식객체는 강제형변환을 통해 다시 자식 타입으로 바꿀 수 있다. - 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다. 예제) Dog 클래스가 Animal 클래스를 상속함 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Animal { //필드 String kind; //생성자 public Animal(String kind) { this.kind = kind; } //메소드 publ..
08_클래스 : 필드, 생성자, 메소드 01. 클래스란 - 어떤 객체를 메모리에서 사용하기 위해서는 먼저 그 객체를 만들어야 한다. 객체를 만들기 위해 필요한 설계도가 클래스이다. - 모든 클래스는 반드시 하나 이상의 생성자를 가지고 있다(생성자는 오버로딩 될 수 있다). 02. 클래스의 구성 멤버 - 클래스는 필드, 생성자, 메소드로 구성되어 있다. 자세한 내용은 아래에서 살펴본다. 1) 필드 - 객체의 고유 데이터, 상태 정보를 저장하는 곳 - 블록을 벗어나면 메모리에서 제거되는 변수와 달리 생성자와 메소드 전체에서 사용되며 객체가 소멸하지 않는 한 계속 존재한다. 필드는 선언과 동시에 초기화 될 수도 있고 그렇지 않을 수도 있다. 1 2 3 4 5 6 7 8 9 10 public class Car { //필드 String company ..
06_참조형 데이터 타입 01. 참조형 데이터 타입(reference type) - 객체(object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다. - 객체타입에서 ==, != 연산자는 같은 객체를 참조하는지 아니면 다른 객체를 참조하는지를 비교한다. 즉, 주소값을 비교한다고 보면 된다. 02. 메모리 구조 Static 영역(메소드 영역) Heap 영역 Stack 영역 System 영역 - JVM이 시작할 때 생성되며 모든 스레드가 공유하는 영역 - 객체와 배열이 생성되는 영역 - 스택영역의 변수나 다른 객체의 필드가 이 곳을 참조 - 더 이상 참조되지 않는 객체는 Garbage Collector에 의해 자동으로 제거된다 - 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당 됨 - 변수가 초..
05_중복 없이 로또 번호 추출(조건문, Math.random()) 조건문과 Math.random() 함수를 사용하여 중복 없이 로또 번호를 추출해보았다. 자바를 공부하는 사람이면 모두 한번 쯤은 풀어봤을 것이다. 다양한 방법이 있겠지만 나는 아래와 같은 방법을 사용했다. 1. 크기가 6인 int형 배열을 만든다. 2. 배열의 크기만큼 반복문을 돌려 난수를 발생시키고, 그 난수를 배열에 넣는 과정을 반복한다. 참고: - Math.random() 함수는 0.0 이상, 1.0 미만의 난수를 발생시킨다. - 따라서 Math.random()에 45를 곱하면 0.0 이상 45.0 미만의 난수가 발생하는데 - 로또번호는 1~45이므로 마지막에 1을 더해주면 1.0이상 46.0 미만의 난수를 얻을 수 있다. - 그것을 int형으로 변환하여 최종적으로 1 이상 46 미만인 정수가 나오..