Java 40

자바 프로그래밍 (Java) - 20 : 예외의 구분 (Checked Exception, Unchecked Exception), 인위적 예외 발생 방법 (throw)

- 예외의 구분 1) Checked Exception 발생한 예외를 던지지 않기 때문에, try – catch 문으로 처리하지 않거나 발생된 예외를 던지지 않으면 컴파일 에러를 발생 시킨다. 아래의 인위적 익셉션의 예제가 Checked Exception이다. 2) Unchecked Exception 발생한 예외를 자동으로 호출한 곳으로 던진다. 따라서 try - catch문으로 예외 처리를 하지 않아도 컴파일은 된다. RuntimeException은 모두 Unchecked Exception이고, 나머지는 모두 Checked Exception이다. - 인위적으로 익셉션을 발생시키는 방법 (throw 문) 때로는 익셉션을 인위적으로 만들어서 발생시키고 싶은 경우가 있다. 이런 경우 인위적으로 익셉션을 발생하..

Java 2016.07.13

자바 프로그래밍 (Java) - 19 : 예외 처리 (try - catch)

- 익셉션을 밖으로 던지는 메서드 다음은 파라미터로 받은 인수를 0으로 나누는 메서드이다. 당연히 Arithmetic Exception (Divided by Zero)를 발생 시킨다. 그런데 에러 코드를 보면 예외가 두곳에서 발생한 것을 알 수 있다. 그 이유는 무엇일까? public class Hello { public static void main(String[] args) { int num = 10; devideByZero(num); } public static void devideByZero(int num){ num = num / 0; } } Exception in thread "main" java.lang.ArithmeticException: / by zero at Chap01.Hello.dev..

Java 2016.07.13

자바 프로그래밍 (Java) - 18 : 객체와 클래스 (필드 초기화 및 이름 명명 규칙)

- 필드 초기화 및 final 클래스의 필드는 선언과 초기화를 분리하여, 생성자에서 초기화하는 것을 권장한다. 또한, final 변수도 생성자에서 선언과 분리하여 초기화할 수 있다. 다음은 그 예제이다. public class Person { private int age; private final String species; Person(){ age = 0; // 생성자에서 초기화하는 것을 권장한다. species = "Human"; // final 필드는 선언과 동시에 초기화할 수 있지만, 생성자에서도 초기화 할 수 있다. // 초기화하지 않으면 컴파일 에러가 발생한다. } } - 자바 이름 명명 규칙 (Java Naming Rules) 1) UpperCamelCase : 클래스 2) lowerCame..

Java 2016.07.12

자바 프로그래밍 (Java) - 17 : 객체와 클래스 (명시적 생성자 호출 : this, this with constructor)

- 명시적 생성자 호출 (this와 생성자(Constructor)) 한 생성자 안에서, this 키워드를 사용하여 같은 클래스의 다른 생성자를 호출할 수 있다. 이것을 명시적 생성자 호출이라고 부른다. 명시적 생성자 호출은 그 생성자 안에서 첫 번째 라인에 위치해야 한다. 이는 코드 중복을 해결하기 위해서 사용된다. public class Rectangle { private int x, y; private int width, height; public Rectangle(int width, int height) { this.x = 0; this.y = 0; this.width = width; this.height = height; } public Rectangle(int x, int y, int width..

Java 2016.07.12

자바 프로그래밍 (Java) - 16 : 객체와 클래스 (static method, this)

- static method static method는 특정 인스턴스 보다는 클래스의 모든 인스턴스와 관련 있는 메서드이다. 그런 관점에서 static 변수와 유사하다. static method는 소유하는 객체가 없으며, 인스턴스와 함께 사용되지 않는다. 또한 클래스가 인스턴스가 만들어지기 전에도 호출될 수 있게 된다. 객체의 런타임에 기반한 인스턴스 함수와 다르게 컴파일 타임에 기반한다. static method의 목적은 그 클래스 내부에 있는 static variable를 호출하기 위함에 있다. 즉 static method에서 non – static member에 대한 접근을 제한하고 (컴파일 에러가 발생한다.), non – static method에서 static member에 대한 접근은 권장하지..

Java 2016.07.12

자바 프로그래밍 (Java) - 15 : 객체와 클래스 (new 연산자, 기본 생성자(Default Constructor), 필드의 기본 값)

- new 연산자 (new operator) new 연산자는 한 객체를 위한 메모리를 적재함으로써 클래스를 인스턴스화하며, 그 메모리에 대한 참조 (reference)를 반환한다. 클래스를 인스턴스화한다는 말은, 객체를 만든다는 것과 같은 의미이다. new 연산자는 직접적으로 표현식에 사용할 수 있다. 아래는 그 예이다. int height = new Rectangle().height - 기본 생성자 (Default Constructor) Java와 C#에서 기본 생성자는 클래스를 위해 정의된 생성자가 없는 경우에, 컴파일러에 의해 자동적으로 생성되는 생성자이다. 기본 생성자는 매개변수가 없는 생성자이다. 기본 생성자는 상위의 기본 생성자를 암시적으로 호출하며, 그리고 모든 필드들을 초기화한다. - 필드..

Java 2016.07.12

자바 프로그래밍 (Java) - 14 : 객체와 클래스 (생성자, 생성자 오버로딩)

- 생성자 (constructor) 클래스 기반의 객체 지향 프로그래밍에서, 클래스의 생성자(constructor)는 객체를 만드는 특별한 타입의 서브루틴이다. 일반적으로 생성자는 필요한 멤버 변수를 설정하기 위해 사용하는 인수(arguments)를 받는다. 명시적인 리턴 타입이 없다는 측면에서 생성자는 메서드와 다르다. 생성자는 일반적으로 클래스와 같은 이름을 가지며, 객체의 데이터 멤버들을 초기화하는 작업을 수행한다. 또한 많은 언어들이 생성자의 오버로딩(Overloading)을 허가한다. 이에 따라 한 클래스에 인수가 다른 여러 생성자가 존재할 수 있게 된다. - 생성자 오버로딩 (Overloading) 생성자 오버로딩이란 다른 타입의 파라미터를 가지는 같은 이름의 생성자를 작성할 수 있는 것을 말..

Java 2016.07.12

자바 프로그래밍 (Java) - 13 : 연산자 종류 및 규칙 (3) - 예제 마무리

public class SmartExample { public static void main(String[] args) { System.out.println(1 / 2 - 3); // -3 System.out.println(10.0f / 2L); // 5.0 (float 타입) byte a = 2, b = 3, sum1; //sum1 = a + b; // error int sum2 = a + b; // right int num1 = 3, num2 = -5; num1 =- num2; // (num1 = (-num2)) => num1 : 5 num1 -= num2; // (num1 = num1 - num2) => num1 : 10 System.out.println("num = " + 3 + 4); // nu..

Java 2016.07.12

자바 프로그래밍 (Java) - 11 : 연산자 종류 및 규칙 (1)

- 연산 규칙 및 종류 1) 이항 연산 시 큰 데이터 타입으로 형 변환하여 연산이 수행된다. 예를 들어 int와 double의 연산은 먼저 int를 double로 암시적 형 변환 후에 계산된다. 또, float와 long 타입의 연산은 먼저 long을 float로 암시적 형 변환 후에 계산된다. 2) int promotion Java Virtual Machine은 32bit 체제이기 때문에, byte, short를 int로 형 변환 후에 계산을 수행한다. 이는 int가 4byte로 계산 속도가 가장 빠르기 때문이다. 3) 부호 연산자 ( +=, -=와 =+, =-의 차이) +=과 -=은 양쪽의 피연산자를 먼저 더하고 (혹은 빼고), 그 값을 좌측 피연산자에 대입하는 것이다. 하지만 =+, =-은 우측의 ..

Java 2016.07.12