[Java] finally
·
TIL/Java
finally finally는 try 구문에서 예외가 발생하는 것과 상관없이 언제나 실행되는 로직이다. 기본구조 try { 예외의 발생이 예상되는 로직 } catch(예외클래스 인스턴스) { 예외가 발생했을 때 실행되는 로직 } finally { 예외여부와 관계없이 실행되는 로직 } finally는 예외와는 상관없이 반드시 끝내줘야 하는 작업에 사용이 된다.(ex. 데이터베이스 접속을 끊는 작업) 접속을 끊는 작업은 예외 발생여부와 상관없기 때문에 finally에서 처리하기에 좋은 작업이라고 할 수 있다. 즉, finally는 작업의 뒷정리를 담당한다고 볼 수 있다. ps. 예외 관련한 글은 아래 링크를 통해 확인하자 https://yelin1217.tistory.com/61 [Java] 예외(Excep..
[Java] 다형성(Polymorphism)
·
TIL/Java
다형성(Polymorphism) 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. Overloading과 다형성 오버로딩은 가장 이해하기 쉬운 다형성의 예라고 할 수 있다. 아래의 코드를 살펴보자 클래스 O의 메소드 a는 두개의 본체를 가지고 있으며, 동시에 두개의 본체는 하나의 이름인 a를 공유하고 있다. 같은 이름이지만 서로 다른 동작 방법(매개변수)을 가지고 있기 때문에 오버로딩은 당형성의 한 예라고 할 수 있다. 클래스와 다형성 아래 코드는 클래스 B의 데이터 형이 클래스 A이다. 클래스 B는 클래스 A를 상속하고 있으며, 이런 경우에는 클래스 B는 클래스 A를 데이터 형으로 삼을 수 있다. 아래 코드를 살펴보면 19행에 에러가 발생한다. 즉, object.x()..
[Java] 인터페이스(interface)
·
TIL/Java
인터페이스(interface) 인터페이스 역할은 어떤 클래스(객체)가 있고 그 클래스가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 인터페이스와 상속은 다르다. 상속이 상위 클래스의 기능을 하위 클래스가 물려 받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다. 클래스를 선언 할 때는 class를 사용하지만 인터페이스는 interface를 사용한다. 상속은 extends를 사용하지만 인터페이스는 implements를 사용한다. 간단한 코드를 통해 살펴보자 클래스 A 뒤의 implements I는 이 클래스가 인터페이스 I를 구현하고 있다는 의미다. 그것은 3행의 interface I의 맴버인 public void z() ..
[Java] abstract
·
TIL/Java
abstract abstract는 한국어로는 추상으로 번역되며, 상속을 강제하는 일종의 규제라고 생각하면 된다. abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이며, abstract는 구체적인 로직을 가지고 있으면 안된다. 멤버 중에 하나라도 abstract라고 한다면 클래스도 자동으로 abstract로 바뀌며, abstract 클래스는 추상 메소드 뿐만 아니라 일반 메소드도 가질 수 있다. 그렇다면 abstract는 왜 쓰는 것일까?? 부모 클래스에는 메소드의 시그니처만 정의해놓고 그 메소드의 실제 동작 방법은 이 메소드를 상속 받은 자식 클래스의 책임으로 위임하기 위해서이다. abstract는 작은 규모의 프로젝트에서는 거의 작성하는 경우는 없다고 한다. 아..
[Java] 패키지
·
TIL/Java
packages.example1 패키지 안에는 A, B라는 java 파일이 있고 packages.example2 패키지 안에는 B, C라는 java 파일이 있다. A와 B 클래스의 코드는 아래 사진과 같다. packages.example2 패키지 안에 있는 B 클래스에 있는 main 메소드를 실행시키면 에러가 발생한다. 그 이유는 packages.example2 패키지 안에 A 클래스가 없기 때문이다. 이러한 에러를 해결하기 위해서는 import를 사용하여 A 클래스가 있는 패키지 경로를 넣으면 된다. 다음은 에러가 발생할 수 있는 상황에 대해서 언급해 보려고한다. packages.example3 패키지 안에 D 라는 클래스가 있다. D 클래스 main 메소드에서 B를 인스턴스화를 시키려고 하는데 exa..
[Java] 메소드 오버로딩(Method Overloading)
·
TIL/Java
메소드 오버로딩(Method Overloading)_22.01.02 클래스 내에 같은 이름의 메소드를 2개 이상 정의할 수 있게 해주는 기능이다 public class Calculator { int add(int a, int b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } double add(double a, double b) { return a + b; } public static void main(String[] args) { Calculator c = new Calculator(); System.out.println(c.add(2, 4));// test 1 System.out.println(c.add(2, 4, 8));..
[Java] 오버라이딩(Overriding)
·
TIL/Java
오버라이딩(Overriding)이란? 재정의를 의미하며, 상속과 밀접한 관계를 가지고 있다. 즉, Java에서는 부모 클래스가 가지고 있는 메소드를 물려 받지만 그것을 그대로 사용하지 않고 자식 클래스의 필요에 따라서 기능을 변경하는 방법이다. 오버라이딩을 하기 위해서는 아래의 조건을 충족시켜야 한다. 1) 메소드의 이름 2) 메소드 매개변수의 숫자와 데이터 타입 그리고 순서 3) 메소드의 리턴 타입 아래 코드를 살펴보면, 24번 째 줄의 코드는 자식 클래스가 부모 클래스의 sum 메소드 기능을 가져온 뒤 기능을 조금 추가하였다. 29번 째 줄의 코드를 살펴보면, 자식 클래스가 부모 클래스의 avg 메소드 기능과 똑같이 사용하겠다는 가정하에 super를 사용하여 기능을 가져왔다. 자식 클래스에서 추기적인..
[Java] 상속과 생성자
·
TIL/Java
아래 코드처럼 자기 자신을 인스턴스화 시키는 것도 가능하다. 그 이유는 어떠한 생성자도 생성하지 않아 Java는 자동으로 매개변수가 없는 기본 생성자를 만들어주기 때문에 가능하다. 만약, 생성자를 하나라도 생성하게 된다면 Java는 명시적으로 기본 생성자를 생성해 주지 않는다. public class ConstructorDemo { public static void main(String[] args) { ConstructorDemo c = new ConstructorDemo(); } } 아래 코드를 실행을 하면 에러가 발생한다. 그 이유는 ConstructorDemo 클래스는 인자가 없는 생성자를 가지고 있지 않고 인자가 있는 생성자를 가지고 있기 때문이다. main 메소드에서 인자가 없는 생성자를 호출..
[Java] 상속(Inheritance)
·
TIL/Java
상속(Inheritance) 상속이란 물려준다는 의미이다. 어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려받을 수 있는 기능을 상속이라고 한다. 이때 기존의 객체는 기능을 물려준다는 의미에서 부모 객체가 되고, 새로운 객체는 기존의 객체의 기능을 물려받는다는 의미에서 자식 객체가 된다. 부모 클래스를 상위 클래스, 자식 클래스를 하위 클래스라고도 표현한다. 객체에 메소드를 추가하는 것이 어려운 경우는 다양하지만 공부했을 때 들었던 경우 두 가지만 아래와 같이 정리하였다. 객체를 자신이 만들지 않은 경우에는 소스를 변경할 수 없다. 변경할 수 있다고 해도 원 소스를 업데이트 하면 자신이 만든 메소드는 사라진다. 이러한 문제가 일어나지 않게 하기 위해서는 지속적으로 코드를 관리해야 ..