본문 바로가기

Develop/Java41

예외 정보를 얻는 방법 3가지 예외가 발생했을 때, 그 예외에 대한 정보를 얻는 방법에는 다음과 같이 3가지가 있다. e.getMessage() e.toString() e.printStackTrace(); e.getMessage()는 아주 간단하게 예외 정보를 알려준다. e.toString()은 예외의 내용과 원인을 알려준다. e.printStackTrace()는 예외가 어느 곳에서 발생했는지 자세하게 단계별로 알려준다. 다음 예시 코드를 보면서 이해해보자. 여기서는 null을 printMyName이라는 메서드에 인자로 넣어, 대문자로 바꾸려고 한다. 이때, NullPointerException이 발생할 것이다. 각각의 예외 정보를 출력하는 메서드를 이용해서 결과를 확인해보자. e.getMessage() 출력 결과 간단하게 null .. 2022. 9. 13.
추상화(Abstraction) 추상화는 공통의 속성이나 기능을 모아 추출하는 것을 뜻한다. 자바에서는 주로 추상 클래스와 인터페이스라는 문법 요소를 사용해서 추상화를 구현한다. 추상 클래스를 먼저 보자. 추상 클래스에서는 abstract 제어자를 사용한다. 자바에서 제어자는 크게 접근 제어자와 기타 제어자로 구분된다. abstract 제어자는 기타 제어자에 속한다. abstract 제어자는 주로 클래스와 메서드에 붙는다. 각각 추상 메서드, 추상 클래스라고 부른다. 어떤 클래스에 추상 메서드가 포함되면, 자연스레 그 클래스는 추상 클래스가 된다. 위와 같이, 추상 메서드는 메서드 바디가 없다. 또, 추상 클래스는 최소 하나 이상의 추상 메서드를 가져야 한다. 그리고, 추상 클래스는 확장된 클래스에서 메서드 바디가 완성되기 전까지는 자.. 2022. 9. 10.
다형성(Polymorphism) 다형성은 '여러 개의 형태를 갖다'라는 의미이다. 자바에서 다형성이란, 같은 자료형에 여러 가지 객체를 대입하여 목적에 맞는 결과를 얻을 수 있는 성질이다. 다형성은 다음과 같은 특징을 가진다. 부모 클래스 타입의 참조변수로 자식 클래스의 인스턴스를 참조할 수 있다. (부모 클래스 Parent와 자식 클래스 Child가 있고, 서로 상속관계에 있다라고 전제로 깔고 예시를 보자.) Parent child = new Child(); ## 자식 클래스(Child) 인스턴스를 생성하고, 부모 클래스(Parent) 타입의 참조변수에 할당 부모 클래스 타입의 참조변수로 자식 클래스의 멤버들에 접근할 수 있다. 부모 클래스에서 상속받은 멤버만 접근이 가능하고, 자식 클래스에서 만들어진 멤버들은 접근이 불가능하다. 자.. 2022. 9. 10.
캡슐화(Encapsulation) 객체 지향 프로그래밍(OOP)에서 객체의 속성과 기능을 하나로 묶어, 외부에 노출되지 않도록 하는 것이다. 클래스, 변수, 메서드에 대해 접근 제어자를 통해 캡슐화할 수 있다. 캡슐화를 사용하는 목적은 외부의 잘못된 사용으로부터 본래 객체의 손상을 방지하기 위함이다. 캡슐화는 다음 3가지의 특징을 가진다. 객체의 제공자, 이용자를 정확하게 나누고, 데이터의 접근 권한을 제한하여 정보를 은닉, 보안한다. 메서드의 구현 방법, 객체 내의 데이터가 바뀌어도 다른 객체에는 영향을 주지 않아 독립성을 보장한다. 클래스의 결합도가 낮아지기 때문에, 재사용이 용이하다. 그렇다면, 캡슐화를 사용하기 위한 접근 제어자에는 어떤 것들이 있고, 특징은 어떨까? 접근 제어자 클래스 내로부터의 접근을 허용하는가 패키지 내로부터.. 2022. 9. 6.
상속(Inheritance) 객체 지향 프로그래밍(OOP)에서 상속은 하위 클래스가 상위 클래스의 속성과 기능을 그대로 받아 재사용하는 것을 말한다. 하위 클래스는 extends 키워드를 통해 상위 클래스를 상속받는데, 여기서 extends는 '확장하다' 라는 의미를 갖고 있으므로 상속 받은 하위 클래스는 상위 클래스를 확장시킨 것이라고 이해하는 게 편할 것 같다. 객체 지향 프로그래밍의 핵심 4가지 요소가 존재한다. 상속 (Inheritance) 캡슐화 (Encapsulation) 다형성 (Polymorphism) 추상화 (Abstraction) 상속을 통해서 클래스를 작성하면, 상위 클래스의 있는 속성과 기능을 동일하게 확장된 하위 클래스에서도 쓸 수 있기 때문에 코드의 재사용성이 높다. 상위 클래스의 속성 및 기능을 목적에 맞.. 2022. 9. 6.
구분자를 기준으로 문자열 분리하는 방법 구분자(delimiter)를 기준으로 문자열을 분리하는 방법에는 무엇이 있을까? 먼저, split() 메서드를 보자. split() 메서드는 다음과 같이 2가지 형태로 사용할 수 있다. public String[] split(String regex) public String[] split(String regex, int limit) split() 메서드는 매개변수로 문자열을 구분할 정규식 형태의 구분자를 입력받는다. 구분자는 정규식(regular expression)의 형태이고, 알맞은 정규식을 입력해주면 여러 개의 문자열을 자를 수 있다. 다음 예제로 알아보자. "a&b,c,d-e" 라는 문자열을 & , - 를 구분자로 구분하려 한다. 이럴 때는, 위와 같이 | 을 구분자 사이에 넣어주어 정규식을 표현.. 2022. 9. 6.
내부 클래스란? 내부 클래스는 클래스 내에 선언된 클래스이다. 내부 클래스는 외부 클래스의 멤버들에 쉽게 접근할 수 있고, 코드의 복잡성을 줄일 수 있다. (출처 : https://velog.io/@spwwy3437/JAVA-%EB%82%B4%EB%B6%80%ED%81%B4%EB%9E%98%EC%8A%A4) 내부 클래스의 내용은 https://velog.io/@spwwy3437/JAVA-%EB%82%B4%EB%B6%80%ED%81%B4%EB%9E%98%EC%8A%A4 을 참고하시면 더 자세히 이해하실 수 있습니다. 2022. 9. 5.
생성자란? 생성자는 인스턴스가 생성될 때, 호출되는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드이다. 생성자의 기본 구조는 다음과 같다. 클래스명(매개변수) { ---- 생략 ---- } 생성자도 메서드라고 할 수 있다. 하지만, 메서드와 다른 점이 존재한다. 생성자의 이름은 반드시 클래스의 이름과 같아야 한다. 생성자는 리턴 타입 자체가 존재하지 않는다. 매개 변수는 있을 수도, 없을 수도 있다. 한 클래스 내에 여러 개의 생성자가 존재할 수 있다. 모든 클래스에는 하나 이상의 생성자가 존재해야 한다. 메서드 오버로딩은 생성자에서도 구현될 수 있다. 다음 코드를 통해 예시를 보자. 클래스에서 생성자를 만들어주지 않으면, 자동으로 자바 컴파일러가 기본 생성자를 만들어준다. 기본 생성자는 매개변수가 없는 .. 2022. 9. 5.
필드(Field)와 메서드(Method)란? 자바에서 변수는 크게 다음 3가지로 구분된다. 클래스 변수 인스턴스 변수 지역 변수 객체의 속성을 정의하는 필드는 '클래스에 포함된 변수'를 지칭한다. 필드 변수는 클래스 변수와 인스턴스 변수를 말한다. 이 둘은 static 키워드의 유무로 구분할 수 있다. staic 키워드가 함께 선언된 것은 클래스 변수, 그렇지 않은 것은 인스턴스 변수이다. 이 두 가지 변수에 포함되지 않고, 메서드 내에 포함된 모든 변수를 지역 변수라고 한다. 인스턴스 변수는 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수이다. 인스턴스 변수는 new 키워드를 이용해 인스턴스가 생성될 때 만들어진다. 필드(멤버) 변수는 힙 메모리 영역에, 지역 변수는 스택 메모리에 저장이 된다. 힙 메모리에 저장되면 객체가 없어지지 않.. 2022. 9. 5.