
예외가 발생했을 때 생성되는 예외 클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨 있으며, getMessage()와 printStackTrace()를 통해서 이 정보들을 얻을 수 있다. catch블럭의 괄호()에 선언된 참조변수를 통해 이 인스턴스에 접근할 수 있다. 이 참조변수는 선언된 catch블럭 내에서만 사용 가능하며, 자주 사용되는 메서드는 다음과 같다. printStackTrace() 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다. getMessage() 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다. 더보기 예제 8-5 Ex8_5 실습하기 더보기 멀티 catch블럭 내용이 같은 catch블럭을 하나로 합친 것(JDK1..

프로그램 오류의 종류 ⭐️ 컴파일 에러(compile-time error) : 컴파일 시 발생하는 에러 런타임 에러(runtime error) : 실행 시 발생하는 에러(프로그램 종료) 논리적 에러(logical error) : 실행은 되지만, 작성 의도와 다르게 동작하는 것(프로그램 종료x) 더보기 1. 컴파일 에러(compile-time error) :컴파일 시 발생하는 에러 컴파일러 하는 일 구문 체크 번역 최적화 생략된 코드 추가 컴파일러가 하는 일은 기본적으로 '구문 체크 및 번역'이다. 문법에 맞아야 번역을 할 수 있기 때문에 '구문체크'를 먼저 한다. 그리고 소스코드 '최적화'기능도 한다. 옛날에는 구문체크, 번역만 했는데 요즘에는 컴파일러가 똑똑해져서 더 많은 에러를 체크할 수 있고, 최적..

내부 클래스(inner class) 클래스 안의 클래스 더보기 내부 클래스의 장점 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. 코드의 복잡성을 줄일 수 있다(캡슐화) 더보기 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. class A : 클래스 B의 외부 클래스 class B : 클래스 A의 내부 클래스 객체생성 없이도 A의 멤버 접근 가능 코드의 복잡성을 줄일 수 있다(캡슐화) class B가 class A의 내부에서만 사용된다면, 굳이 밖에 둘 이유가 없다. class B를 class A의 내부 클래스로 만들면 된다. 그 결과, 다른 클래스에서는 class B가 보이지 않게 된다. InnerTest 실습하기 내부클래스의 선언 내부 클래스의 종류와 특징 내부 클래스..

디폴트 메서드와 static 메서드 (JDK1.8부터) 인터페이스에 디폴트 메서드, static메서드 추가 가능 디폴트 메서드(default method) 인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움 해결책 → 디폴트 메서드(default method) 디폴트 메서드는 인스턴스 메서드(기존 인터페이스 원칙 위반, 예외) 디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책 디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책 여러 인터페이스의 디폴트 메서드 간의 충돌 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다. 더보기 위의 규칙이 외우기 귀찮으면, 그냥 필요한 쪽..

에러 메세지 Error: Could not find or load main class YoilTeller Caused by: java.lang.ClassNotFoundException: YoilTeller 자바 인터프리터(java.exe)로 YoilTeller를 실행하려 했지만 위와 같은 에러만 나올 뿐이다. 해결 '시스템 환경 변수 편집'에 들어간다. '환경변수(N)' 클릭 -> '시스템 변수(S)' 클릭 -> classpath 선택 -> '편집(I)' 클릭 -> "%JAVA_HOME%\lib; java 인터프리터가 %JAVA_HOME%\lib 디렉토리 내에서만 YoilTeller 클래스를 찾으려고 하기 때문에 메인 클래스를 찾을 수 없다는 오류가 발생한 것이다. "%JAVA_HOME%\lib;.; 하..

byte b = 1000; // 에러. byte타입의 범위(-128 ~ 127)를 벗어난 값의 대입 형변환(Casting) 변수 또는 상수의 타입을 다른 타입으로 변환하는 것 (타입)피연산자 () : 형변환 연산자, 캐스트 연산자 double d = 85.4; int score = (int)d; // 두 번째 줄 연산과정 int score = (int)d; int score = (int)85.4; int score = 85; Ex3_5 실습하기 자동 형변환 경우에 따라, 형변환을 생략하면 컴파일러가 생략된 형변환을 자동적으로 추가해준다. 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다. 1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다. 2. 기본형과 참조형은 서로 ..

숫자를 문자로 변환 숫자에 '0'을 더한다. (char)(3 + '0') // == 3 문자를 숫자로 변환 문자에서 '0'을 뺀다. '3' - '0' // == 3 숫자를 문자열로 변환 숫자에 빈 문자열("")을 더한다. 3 + "" // "3" 문자열을 숫자로 변환 i) Integer.parseInt()을 사용한다. ii) Double.parseDouble()을 사용한다. Integer.parseInt("3") // == 3 Double.parseDouble("3.14") // == 3.14 문자열을 문자로 변환 charAt(0)을 사용한다. "3".charAt(0) // == '3' 더보기 출처 - Calendar클래스 관련 charAt() 레퍼런스 블로그(https://dreamaz.tistory...

서론 백준 프로그래머스 알고리즘 문제를 풀다보면, 입력값을 받는 코드를 작성해야 하는 순간이 온다. 레퍼런스를 통해 방법은 알았지만 그 의미가 무엇인지 알아보도록 하자. import java.util.Scanner; Scanner 클래스를 사용하기 위해 추가 Scanner sc = new Scanner(System.in); Scanner클래스의 객체를 생성 int input = sc.nextInt(); 입력받은 정수 타입의 값을 변수 input에 저장 String input = sc.nextLine(); 입력받은 문자열 타입의 내용을 변수 input에 저장 int타입으로 변환하려면 Integer.parseInt(input);을 사용 Ex2_10 실습하기

문자열 결합 문자열과 덧셈연산을 하면 그 결과는 항상 문자열이 된다. 덧셈 연산자(+)는 피연산자가 모두 숫자일 때는 두 수를 더하지만, 피연산자 중 어느 한 쪽이 String이면 나머지 한 쪽을 먼저 String으로 변환한 다음 두 String을 결합한다. 문자열 + any type -> 문자열 + 문자열 -> 문자열 any type + 문자열 -> 문자열 + 문자열 -> 문자열 EX2_7 실습하기 7 + " " → "7" + " " → "7 " " " + 7 → " " + "7" → " 7" 7 + "7" → "7" + "7" → "77" 7 + 7 + "" → 14 + "" → "7" + "" → "14" "" + 7 + 7 → "7" + 7 → "7" + "7" → "77" true + "" → ..

변수, 상수, 리터럴 변수(variable) - 하나의 값을 저장하기 위한 공간 상수(constant) - 한 번만 값을 저장 가능한 변수 리터럴(literal) - 그 자체로 값을 의미하는 것 더보기 변수(variable) - 하나의 값을 저장하기 위한 공간 상수(constant) - 한 번만 값을 저장 가능한 변수 리터럴(literal) - 그 자체로 값을 의미하는 것 기존의 '상수'와 완벽히 동의어. Java에서 상수를 '한 번만 값을 저장 가능한 변수'로 정의했기 때문에 상수와 리터럴의 개념을 구분했다. 예제VarEx3 코드 더보기 Problem Description | Cannot assign a value to final variable 'score' 해석 : 상수 'score'에 값을 (재)..

자바 가상 머신(Java Virtual Machine, JVM) 자바 프로그램이 실행되는 가상 컴퓨터 한번 작성하면 어디서든 실행 가능하다. 일반 애플리케이션은 OS와 바로 맞붙어 있기 때문에 OS종속적이다. 그래서 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야 한다. 반면에 Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능한 것이다. 단, JVM은 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다. 그래서 썬에서는 일반적으로 많이 사용되는 주요 OS용 JVM을 제공하고 있고, 이렇게 함으로써 자바의 중요한 장점 중의 하나인 “Write once, run anywhere.(한..

상속 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것 두 클래스를 부모와 자식으로 관계를 맺어주는 것. 더보기 두 클래스를 부모와 자식으로 관계를 맺어주는 것. class 자손클래스 extends 부모클래스 { // ... } 상속의 특징 ⭐ 자손 클래스는 조상 클래스의 모든 멤버를 상속받는다. (단, 생성자와 초기화 블럭 제외) 자손의 멤버 개수는 조상보다 적을 수 없다(많거나 같다) 자손의 변경은 조상에 영향을 미치지 않는다. 더보기 1. 자손 클래스는 조상 클래스의 모든 멤버를 상속받는다. 단, 생성자와 초기화 블럭은 상속되지 않는다. 2. 자손의 멤버 개수는 조상보다 적을 수 없다 자손의 멤버 개수는 조상보다 같거나 많다. 3. 자손의 변경은 조상에 영향을 미치지 않는다. 조상의 변경은 자..

변수의 초기화 변수를 선언하고 처음으로 값을 저장하는 것 멤버변수(iv, cv)와 배열은 각 타입의 기본값으로 ‘자동 초기화’ 된다. 지역변수(lv)는 사용 전에 반드시 ‘수동 초기화’해야 한다. 더보기 지역변수(lv)는 사용 전에 반드시 ‘수동 초기화’해야 한다. class InitTest { int x; // 인스턴스 변수 int y; // 인스턴스 변수 void method1() { int i; // 지역변수 int j = i; // 에러. 지역변수를 초기화하지 않고 사용 } } 각 타입의 기본값 더보기 각 타입의 기본값 멤버변수의 초기화 종류 자동 초기화 간단 초기화 복잡 초기화 더보기 1. 자동 초기화 2. 간단 초기화 변수를 선언과 동시에 초기화(=, 대입 연산자) Class Car { int..

생성자 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드 인스턴스 생성 시 수행할 작업(iv 초기화)에 사용 더보기 인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’ 생성자는 iv 초기화 메서드 ⭐️ 객체는 'iv집합' 생성자를 만드는 이유 : iv 초기화를 편리하게 하기 위해 인스턴스 생성 시 수행할 작업(iv 초기화)에 사용 인스턴스 생성 시 수행할 작업은 { } 안에 작성해준다. 생성자 조건 생성자의 이름은 클래스의 이름과 같아야 한다. 생성자는 리턴 값이 없다.(void 안 붙임) 모든 클래스는 반드시 한 개 이상의 생성자를 가져야 한다. 더보기 1. 생성자의 이름은 클래스의 이름과 같아야 한다. 2. 생성자는 리턴 값이 없다.(void 안 붙임) 3. 모든 클래스는 반드시 한 ..

(메서드)오버로딩(overloading) 한 클래스 안에서 같은 이름의 메서드를 여러 개 정의하는 것 더보기 한 클래스 안에서 같은 이름의 메서드를 여러 개 정의하는 것 void println() void println(boolean x) void println(char x) void println(char[] x) void println(double x) void println(float x) void println(int x) void println(long x) void println(Object x) void println(String x) 오버로딩 조건 메서드 이름이 같아야 한다. 매개변수의 타입 또는 개수가 달라야 한다. 반환 타입은 영향 없다. 더보기 1. 메서드 이름이 같아야 한다. 2. ..

선언위치에 따른 변수의 종류 선언위치(영역) 선언위치에 따른 변수의 종류 변수의 생성시기 더보기 선언위치(영역) 클래스 영역 - 선언문만 가능(변수 선언, 메서드 정의), 순서 상관x 클래스 영역 이외의 영역 : ① 메서드 영역, ② 생성자, ③ 초기화 블럭 내부 그 동안은 '변수 타입'에 대해서만 다뤘는데, 이제부터 '변수의 종류'에 대해 공부할 예정이다. '변수의 종류'는 선언위치에 따라 나눈다. 따라서 선언 위치에 대해 공부해야 한다. 선언위치에 따른 변수의 종류 인스턴스변수(iv) - 클래스 영역 클래스변수(static변수, cv) - 클래스 영역 지역변수(lv) - 클래스 영역 이외의 영역 변수의 생성시기 lv - 변수 선언문이 수행되었을 때 메서드 종료 시 자동 제거(범위, scope) iv ..

클래스와 객체 클래스의 정의 : 객체를 정의해 놓은 것 클래스의 용도 : 객체를 생성하는 용도로 사용 객객체의 정의 : 실제로 존재하는 것(사물/개념) 객객체의 용도 : 객체가 깆고 있는 속성과 기능에 따라 용도가 다름 프로그래밍에서 객체란, 클래스에 정의된 내용대로 ‘메모리’에 생성된 것 더보기 클래스와 객체 클래스 : 객체 = 제품 설계도 : 제품(TV 설계도 : Tv) 객체의 구성요소 객체 = 속성(변수) + 기능(메서드) 더보기 객체지향개념 HW(실제 세계) → SW化(=프로그램, 코드 만들기) 하드웨어를 '분석' & '관찰'하여 동영상 플레이어, 오디오 플레이어 등의 프로그램으로 만든다. 분석&관찰 결과, Tv라는 사물(객체)이 '속성'과 '기능'으로 표현할 수 있다. 객체 = 속성(변수) + ..

객체지향 언어 80년 초 소프트웨어의 위기 - 빠른 변화를 못 쫓아감 해결책으로 객체지향 언어를 도입(절차적 -> 객체지향) 코드의 재사용성이 높고 유지보수가 용이, 중복 코드 제거 객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙) 객체지향 4대 특징 캡슐화 상속 추상화 다형성 ★★★ 자주 물어보는 질문 ❓ Q. 객체지향 개념은 어떻게 공부해야 하나요? 더보기 Q. 객체지향 개념은 어떻게 공부해야 하나요? A. 객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙) 규칙 외우세요(A4 2장) 실습 많이 하세요 🍪 📄 - 객체지향개념 암기노트 바로가기