JAVA/Java: 149개의 글
객체를 제거하는 방법 1. 레퍼런스가 영원히 영역을 벗어남 void A() {School s = new School();}메소드가 종료되면 's' 라는 레퍼런스도 죽어버립니다. 2. 레퍼런스에 다른 객체를 대입 School s = new School();s = new School();레퍼런스 's' 에 새로운 객체를 대입하면 첫번째 객체는 버려집니다. 3. 레퍼런스를 직접 'null' 로 설정 School s = new School();s = null;'s' 를 '해제' 하면 첫번째 객체는 버려집니다.즉 레퍼런스 's' 가 아무 객체도 참조하지 않는 것입니다. 레퍼런스가 참조하지 않는 객체는 가비지 컬렉션의 대상이 되어 자동으로 정리됩니다. 출처: https://devbox.tistory.com/entr..
Wrapper 클래스 Wrapper 클래스라는 것은 그 이름이 의미하듯이 'wrap(포장)'하는 기능의 클래스를 의미한다.이것은 주로 JDK1.5 이전에 많이 쓰였던 기능들인데 설명하자만 기본자료형을 객체자료형으로 변환하기 위해서 사용하는 클래스라고 생각하면 된다. 1. 문제제기Object 타입의 변수는 모든 객체형 자룔를 표현할 수 있지만, int나 byte와 같은 기본형 자료는 선언할 수 없다.Object a = 123; //컴파일오류 2. 문제를 일으키는 경우- 변수의 최초 선언- 메소드의 파라미터, 리턴타입- 배열과 같은 자료구조 3. 기본형 자료를 객체형 자료로 처리하기 위한 클래스기본자료형 Wapper 클래스 byteByte 클래스short Short 클래스int Integer 클래스 long..
예외 던지기 1. 예외 되던지기 한 메서드에서 발생할 수 있는 예외가 여럿인 경우, 몇 개는 try-catch문을 통해서 메서드 내에서 자체적으로 처리하고, 그 나머지는 선언부에 지정하여 호출한 메서드에서 처리하도록 함으로써, 양쪽에서 나눠서 처리되도록 할 수 있다. 그리고 심지어는 단 하나의 예외에 대해서도 예외가 발생한 메서드와 호출한 메서드, 양쪽에서 처리하도록 할 수 있다.이것은 예외를 처리한 후에 인위적으로 다시 발생시키는 방법을 통해서 가능한데, 이것을 '예외 던지기'이라고 한다.먼저 예외가 발생한 가능성이 있는 메서드에서 try-catch문을 사용해서 예외를 처리해주고 catch문에서 필요한 작업으로 행한 후에 throw문을 사용해서 예외를 다시 발생시킨다.다시 발생한 예외는 이 메서드를 호..
예외 만들기 1. 예외 발생시키기키워드 throw를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있다.1) 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음 Exception e = new Exception("고의로 발생시켰음"); 2) 키워드 throw를 이용해서 예외를 발생시킨다. throw e; class ExceptionEx{public static void main(String args[]) {try {Exception e = new Exception("고의로 발생시켰음.");throw e; // 예외를 발생시킴// throw new Exception("고의로 발생시켰음."); // 위의 두 줄을 한 줄로 줄여 쓸 수 있다.} catch (Exception e){Syste..
예외 처리 기본 컴파일 에러: 컴파일 할때 발생하는 에러이다.런타임 에러: 프로그램의 실행도중에 발생하는 에러이다. 소스코드를 컴파일 하면 컴파일러가 소스코드(.java)에 대해 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 오류가 있는지 알려준다. 컴파일러가 알려 준 에러들은 모두 수정해서 컴파일을 성공적으로 마치고 나면, 클래스 파일(.class)이 생성되고, 생성된 클래스 파일을 실행할 수 있게 되는 것이다.컴파일러가 소스코드의 기본적인 사항은 컴파일시에 모두 걸러줄 수 있지만, 실행 도중에 발생할 수 있는 잠재적인 오류까지 검사할 수 없기 때문에 컴파일은 잘되었어도 실행 중에 에러에 의해서 잘못된 결과를 얻거나 프로그램이 비정상적으로 종료될 수 있다. 자바에서는 실행 시(runt..
enum 1. enumenum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합(String과 같은 데이터 타입의 일종)이라고 할 수 있다.(배열은 서로 연관된 값들의 집합) 위의 예제에서는 Fruit와 Company가 말하자면 열거인 셈이다. 이러한 패턴을 자바 1.5부터 문법적으로 지원하기 시작했는데 그것이 열거형이다. 이전 코드를 enum으로 바꿔보자. enum Fruit{ APPLE, PEACH, BANANA;}//class Fruit{// public static final Fruit APPLE = new Fruit();// public static final Fruit PEACH = new Fruit();// public static final Fruit..
for-each문 배열과 컬렉션에 저장된 요소에 접근하기 할 때 기존보다 편리한 방법으로 처리할 수 있도록 for문의 새로운 문법이 추가되었다. 1. 배열for(배열의 타입 변수명 : 배열){// 반복할 문장} 2. 컬렉션for(컬렉션에 저장된 요소의 타입 변수명 : 컬렉션){// 반복할 문장} 3. 배열 예제아래의 두 for문은 서로 동일하다.int [] arr = {10, 20, 30, 40 50}; for(int i = 0; i
오토박싱 컬렉션에는 객체로 저장해야하기 때문에 기본형 값을 저장하기 위해서는 Integer나 Long과 같은 Wrapper클래스를 사용해야 했다.그러나 이제부터는 기본형 값을 직접 컬렉션에 저장할 수 있다. 컴파일러에 의해서 자동적으로 Wrapper클래스로 변환되어 저장되는데 이것을 오토박싱이라고 한다.뿐만 아니라 저장된 값을 꺼낼 때도 변환과정을 거치지 않고도 기본형 형태의 값을 바로 얻을 수 있는데 이것을 언박싱이라고 한다. ArrayList list = new ArrayList();list.add(new Integer(10));list.add(new Integer(20));list.add(new Integer(30));Integer i =(Integer)list.get(0);int value = i..
익명 클래스 익명 클래스는 특이하게도 다른 내부 클래스들과 달리 이름이 없다. 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다. 이름이 없기 때문에 생성자도 가질수 없으며, 조상클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하기 때문에 하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다. 오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있다. class InnerEx6 {Object iv = new Object(){ void method(){} };// 익명클래스static Object cv = new Object(){ void met..
public static void main(String[] args) - 메인 메서드는 진입점(Entry Point)을 뜻한다. 그러므로 메인 메서드의 접근자는 항상 public 이어야 한다. --> public - 메인 메서드는 항상 정적이어야 한다. 클래스는 메모리에 로딩된 다음에 사용이 가능하다. static이 붙은 클래스나 메서드, 변수는 컴파일시 자동으로 로딩된다. 메인 메서드는 클래스 로딩 없이 호출할 수 있어야 한다. 그렇기 때문에 static을 사용한다. --> static - void는 리턴타입이 없다는 뜻이다. 메인 메서드는 Entry Point이면서 프로그램의 끝이기도 하다. 메인으로 시작해서 메인이 끝나면 그 프로그램도 끝이다. 그러므로 리턴하는 값 자체가 불필요하다. 프로그램이 끝..