Programming Language 98

[Java] 16. 예외 처리(Exception handling)(5) - 예외 되던지기, 연결된 예외

예외 처리(5) - 예외 되던지기, 연결된 예외예외 되던지기(exception re-throwing)앞서 말했던 것처럼 한 메서드에서 발생할 수 있는 예외가 여럿인 경우 몇 개는 try-catch문을 통해서 자체적으로 처리하고, 나머지는 선언부에 지정하여 호출한 메서드에서 처리하도록 함으로써 양쪽에서 나눠서 처리되도록 할 수 있다.심지어 단 하나의 예외에 대해서도 예외가 발생한 메서드와 호출한 메서드 양쪽에서 처리하도록 할 수 있다.이것은 예외를 처리한 후에 인위적으로 다시 발생시키는 방법을 통해서 가능한데, 이것을 예외 되던지기라고 한다.먼저 예외가 발생할 가능성이 있는 메서드에서 try-catch문을 사용해서 예외를 처리해주고 catch문에서 필요한 작업을 행한 후에 throw문을 사용해서 예외를 다..

[Java] 15. 예외 처리(Exception handling)(4) - finally블럭, 자동 자원 반환: try-with-resources문, 사용자 정의 예외

예외처리(4) - finally블럭, 자동 자원 반환: try-with-resources문, 사용자 정의 예외finally블럭finally 블럭은 try-catch문과 함께 예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적으로 사용된다.try-catch문의 끝에 선택적으로 덧붙여 사용할 수 있으며, try-catch-finally 순서로 구성된다예외 발생시 : try->catch->finally예외 발생 X : try->finallyclass FinallyTest { public static void main(String args[]) { try { startInstall(); // 프로그램 설치에 필요한 준비를 한다. ..

[Java] 14. 예외 처리(Exception handling)(3) - 메서드에 예외 선언하기

예외 처리(3) - 메서드에 예외 선언하기메서드에 예외 선언하기지금까지 다룬 try-catch 사용법 말고 예외를 메서드에 선언하는 방법이 있다.메서드 선언부에 키워드 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주기만 하면 된다.예외가 여러 개일 경우 쉼표(,)로 구분한다void method() throws Exception1, Exception2, ... ExceptionN { // method body}Exception 클래스를 메서드에 선언하면, 모든 종류의 예외가 발생할 가능성이 있다는 뜻이다.메서드의 선언부에 예외를 선언하므로써 메서드를 사용하려는 사람이 메서드를 사용하기 위해 어떠한 예외들이 처리되어져야 하는지를 쉽게 할 수 있다.기존의 많은 언어들은 메서드에 예외..

[Java] 13. 예외 처리(Exception handling)(2) - try-catch 문

예외 처리(2): try-catch문try-catch문try { // 예외가 발생할 가능성이 있는 문장} catch (Exception1 e1) { // Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.} catch (Exception2 e2) { // Exception2이 발생했을 경우, 이를 처리하기 위한 문장을 적는다....} catch (ExceptionN eN) { // ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.}하나의 try블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나 이상의 catch 블럭이 올 수 있다.이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch블럭만 수행된다...

[Java] 12. 예외 처리(Exception handling)(1) - 예외 처리란?

예외 처리(exception handling) - 예외 처리란?프로그램 오류컴파일 에러 : 컴파일 시에 발생하는 에러런타임 에러 : 실행 시에 발생하는 에러논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것그러면 에러와 예외의 차이점은 무엇인가요?에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류예외 클래스의 계층 구조자바는 실행 시 발생할 수 있는 오류(Exception, Error)를 클래스로 정의했다.모든 클래스의 조상은 Object이므로 Exception과 Error클래스 역시 Object 클래스의 자손이다.예외 클래스는 다음과 같이 두 개의 그룹으로 나눌 수 있다.RuntimeException 클래스와 그 자손클래스..

[Java] 11. OOP - 내부 클래스(Inner Class), 익명 클래스

내부 클래스(inner class)내부 클래스는 AWT나 Swing같은 GUI Application 이벤트 처리를 제외하고는 잘 쓰이지 않는다.이런 게 이렇게 작동하는구나 정도만 이해하고 넘어가자내부 클래스란?내부 클래스: 클래스 내에 선언된 클래스클래스에 다른 클래스 선언하는 이유 : 두 클래스가 서로 긴밀한 관계에 있기 때문내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점이 있고, 외부에는 불필요한 클래스를 감춰 코드 복잡성을 줄일 수 있다.class A { // class B { // }}class A는 외부 클래스, class B는 내부 클래스이다.이 때 내부 클래스인 B는 외부 클래스인 A를 제외하고..

[Java] 10. OOP - 인터페이스(Interface)

인터페이스(Interface)인터페이스란?일종의 추상 클래스추상 클래스처럼 추상 메서드를 갖지만 추상화 정도가 높아서 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.오직 추상메서드와 상수만을 멤버변수로 가질 수 있다.추상 클래스를 '미완성 설계도'라고 하면, 인터페이스는 아무 것도 없고 밑그림만 그려져 있는 '기본 설계도' 라고 할 수 있다.인터페이스는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다.인터페이스의 작성class 대신 interfaceinterface에도 클래스와 같이 접근 제어자로 public 또는 default를 사용할 수 있다.interface 인터페이스이름 { public static final 타입 상수이름 = 값; public ab..

[C++] stream(istream, ostream, sstream)과 stream insertion/extraction 연산자 (>>, <<)

C++에서 istream, ostream, sstream는 모두 표준 라이브러리에서 제공하는 스트림 클래스입니다. 이 클래스들은 입출력 작업을 추상화하여 파일, 콘솔, 문자열 등을 손쉽게 다룰 수 있도록 도와줍니다. 각각에 대해 자세히 설명하겠습니다.1. istreamistream은 입력 스트림을 나타내는 클래스입니다. 이 클래스는 데이터 입력을 위한 다양한 메소드를 제공합니다. istream의 주요 역할은 데이터의 입력을 관리하는 것입니다.주요 기능연산자 오버로딩 (>>, stream insertion operator): 데이터를 입력받을 때 사용하는 연산자입니다.ex) cincin은 c++ 표준 라이브러리에서 제공하는 객체로, istream 클래스의 객체임int x;std::cin >> x; // 콘..

[C++] std::distance, std::advance

(알고리즘 코드를 보다가 GPT를 통해서 얻은 답변을 따로 정리해둔 게시글이에요) std::distance()와 std::advance() 함수는 C++ 표준 라이브러리에서 제공하는 반복자 관련 함수입니다. 이 두 함수는 반복자를 다루는 데 유용하게 사용될 수 있습니다.std::distance()std::distance(first, last) 함수는 두 개의 반복자 first와 last 사이의 거리를 계산하여 반환합니다. 이 함수는 다음과 같은 형태로 사용됩니다:template typename std::iterator_traits::difference_typedistance(InputIt first, InputIt last);first: 거리를 계산할 첫 번째 반복자last: 거리를 계산할 두 번째 반복..

[Modern C++] std::move, std::forward

추후 내용 보충. 예정 std::move와 std::forward는 모두 C++11 이후부터 도입된 유틸리티 함수들로, 둘 다 값의 전달 방식을 조절하는 데 사용됩니다. 그러나 각각의 역할과 사용하는 상황이 다르므로, 이 둘을 정확히 이해하는 것이 중요합니다.std::move역할: std::move는 주어진 인자를 "이동"할 수 있도록 하는 역할을 합니다. 이동(move)이란 객체의 자원(메모리 등)을 다른 객체로 옮기는 것을 말하며, 복사보다 효율적인 자원 관리를 가능하게 합니다.사용 방법: std::move는 주로 객체를 이동할 때 사용됩니다. 이 함수는 주어진 인자를 rvalue reference로 변환하여, 이동 연산자(move constructor 또는 move assignment operato..