java - 예외의 강제
2020. 4. 28. 17:25
📌 java/java
API를 사용할 때 설계자의 의도에 따라서 예외를 반드시 처리해야 하는 경우가 있다. 아래의 예제를 보자. package org.opentutorials.javatutorials.exception; import java.io.*; public class CheckedExceptionDemo { public static void main(String[] args) { BufferedReader bReader = new BufferedReader(new FileReader("out.txt")); String input = bReader.readLine(); System.out.println(input); } } 어려운 코드다. 하지만 지금의 맥락에서는 중요한 내용이 아니다. 그래서 예외와 관련되지 않은 부분..
java - finally
2020. 4. 28. 16:29
📌 java/java
finally는 try 구문에서 예외가 발생하는 것과 상관없이 언제나 실행되는 로직이다. 예제를 조금 변경해보자. package org.opentutorials.javatutorials.exception; class A{ private int[] arr = new int[3]; A(){ arr[0]=0; arr[1]=10; arr[2]=20; } public void z(int first, int second){ try { System.out.println(arr[first] / arr[second]); } catch(ArrayIndexOutOfBoundsException e){ System.out.println("ArrayIndexOutOfBoundsException"); } catch(Arithmet..
java - 좀 더 다양한 exception들
2020. 4. 28. 16:09
📌 java/java
이번에는 좀 더 다양한 예외 상황을 처리하는 방법을 알아보자. 코드를 보자. package org.opentutorials.javatutorials.exception; class A{ private int[] arr = new int[3]; A(){ arr[0]=0; arr[1]=10; arr[2]=20; } public void z(int first, int second){ System.out.println(arr[first] / arr[second]); } } public class ExceptionDemo1 { public static void main(String[] args) { A a = new A(); a.z(10, 1); } } 위의 결과는 아래와 같다. 이유를 따져보자. 배열 arr은 3..
java - exception 발생에 대한 처리
2020. 4. 28. 16:01
📌 java/java
예외의 핵심은 뒷수습이다. 하지만 제대로 된 수습은 대단히 어려운 문제이다. 여기서는 자바에서 기본적으로 제공하는 뒷수습의 방법만 알아본다. 코드를 조금 바꿔보자. package org.opentutorials.javatutorials.exception; class Calculator{ int left, right; public void setOprands(int left, int right){ this.left = left; this.right = right; } public void divide(){ try { System.out.print("계산결과는 "); System.out.print(this.left/this.right); System.out.print(" 입니다."); } catch(Exce..
java - 업캐스팅 다운캐스팅
2020. 4. 26. 15:18
📌 java/Object-oriented Programming
캐스팅이란 무엇일까? 캐스팅(casting)이란 타입을 변환하는 것을 말하며 형변환이라고도 한다. 자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다. 이번 글에서는 자식 클래스가 부모 클래스의 타입으로 캐스팅되는 업캐스팅과 반대로 부모 클래스가 자식 클래스의 타입으로 캐스팅되는 다운캐스팅에 대해서 알아본다. 시작하기에 앞서 부모 클래스인 상속 관계의 상위 클래스를 수퍼 클래스, 그리고 자식 클래스인 하위 클래스를 서브 클래스라고 정의한다. 업캐스팅 자바에서 서브 클래스는 수퍼 클래스의 모든 특성을 상속받는다. 그렇기 때문에 서브 클래스는 수퍼 클래스로 취급될 수 있다. 여기서 업캐스팅(Upcasting)이란 서브 클래스의 객체가 수퍼 클래스 타입으로 형변환되는 것을 말한다...
java - 상속의 참조 관계
2020. 4. 26. 12:55
📌 java/Object-oriented Programming
1. 상속의 참조 관계 상속에 있어서의 참조관계로 다음과 같이 일반적인 상황이 있을 수 있다. class First {...} class Second extends First {...} class Third extends Second {...} 위 코드는 문제없이 컴파일이 된다. 상위 클래스의 참조변수로도 하위 클래스의 인스턴스 참조가 가능하기 때문이다. 전체적으로 Third는 Second를 상속하고 연쇄적으로 Second는 First를 상속한다. 따라서 Third도 First를 당연히 상속한다. Third ref1 = ... // compile success Second ref2 = ref1; // Third is a Second First ref3 = ref2; // Third is a First 여..
Homework_W6
2020. 4. 23. 19:17
📌 java/Object-oriented Programming
OOP Lab 6 Due date : April 26, 23 : 59 · Submit your assignment using the following file format: LabNumber_StudentName_Student_ID.zip Example: Lab6_Hongkildong_201620505.zip · The zip file will contain two types of files, namely: 1) report file with file format “Report_Lab number” (eg. report_6) to answer theory questions and to write the screen shot that display the output of your program 2) So..
Homework_W5
2020. 4. 14. 12:09
📌 java/Object-oriented Programming
Submit your assignment using the following file format: LabNumber_StudentName_Student_ID.zip Example: Lab5_Hongkildong_201620505.zip The zip file will contain two types of files, namely: 1) report file with file format “Report_Lab number” (eg. report_5) to answer theory questions and to write the screen shot that display the output of your program 2) Source code file that contains classes to ans..
java - try, catch
2020. 4. 10. 21:57
📌 java/java
객체 지향 이전까지가 프로그램을 동작하게 하는 법이라면 객체 지향은 웅장한 소프트웨어를 만들기 위한 방법이라고 할 수 있다. 그리고 필자는 이러한 지식을 성공하기 위한 지식이라고 부르고 싶다. 지금부터 배울 것은 예외라는 것이다. 예외는 실패하지 않는 법에 대한 수업이다. 아무리 좋은 기획, 좋은 구조 그리고 높은 성능을 가진 소프트웨어라도 심각한 오류나 보안 약점으로 인해서 모든 것을 잃어버릴 수 있다. 안타까운 것은 이러한 문제들이 소를 잃고 나서야 부각된다는 점이다. 어찌 보면 이것은 자연스러운 인간의 마음일 것이다. 또 그렇기 때문에 탁월한 성취라는 것이 흔치 않은 것이기도 할 것이다. 필자는 어렸을 때 합기도를 다녔다. 합기도에서 제일 처음 배우는 것은 무엇일까? 발차기일까? 호신술일까? 아니다..
Homework_W4
2020. 4. 7. 15:15
📌 java/Object-oriented Programming
LabNumber _StudentName_StudentID.zip (eg. Lab4_Hongkildong_201620505.zip The zip file will contain two types of files, namely: 1) report file with file format “Report_Lab number” (eg. report_4) to write the answer of theory questions and the screen shots that display the output of your program. 2) Source code file that contains codes of classes to answer programming questions. Submit your assign..
java - 다형성
2020. 4. 4. 21:30
📌 java/java
이번 시간에는 다형성(Polymorphism)이라는 주제에 대해서 알아보자. 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통해서 비유를 들어보겠다. 키보드의 키를 사용하는 방법은 '누른다'이다. 하지만 똑같은 동작 방법의 키라고 하더라도 ESC는 취소를 ENTER는 실행의 목적을 가지고 있다. 다형성이란 동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미한다. 다형성은 객체나 인터페이스 또는 추상과 같이 철학적인 느낌을 자아내는 용어이다. 그래서 이 주제 또한 철학적이고 현학적인 느낌으로 여러분을 혼란스럽게 할 수 있으나 그것은 학습에 도움이 되지 않는다. 다형성이라는 것이 코드 상에서는 구체적으로 어떤 모습으로 드러나는지에 집중하자..
java - 인터페이스
2020. 4. 4. 18:15
📌 java/java
인터페이스란? 인터페이스(interface)는 다소 추상적인 개념이다. 인터페이스가 무엇인가를 철학적으로 논하려면 책 한권이 필요할지도 모르겠다. 하지만 우리는 철학 공부를 하는 것이 아니라 공학 공부를 하는 것이니 자바의 기능으로서 인터페이스를 받아들이면 되겠다. 필자가 앞선 수업에서 인터페이스를 abstract, final와 함께 대표적인 규제라고 언급했던 것 기억하는가? 인터페이스의 역할은 이렇다. 어떤 객체(class)가 있고 그 객체(class)가 특정한 인터페이스를 사용한다면 그 객체(class)는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 이 에플리케이션은 컴파일 조차 되지 않는다. 예제 우선 단순한 예를 보자. package o..
java - final
2020. 4. 4. 17:04
📌 java/java
추상이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제다. 이 정도로 final의 용도를 기억해두고 코드를 보자. final 필드 필드와 변수는 같은 의미라는 것 기억할 것이다. 실행되는 과정에서 한번 값이 정해진 이후에는 변수 내의 값이 바뀌지 않도록하는 규제다. 클래스 맴버와 인스턴스 맴버 토픽의 첫번째 예제를 기반으로 내용을 조금 바꾸었다. 3.14의 값을 사용자가 절대로 바꿀 수 없게 만드는 것 package org.opentutorials.javatutorials.finals; class Calculator { static final double PI = 3.14; int left, right; public void setOprands(int left, int right) { t..
java - abstract
2020. 4. 4. 15:29
📌 java/java
abstract란 한국어로는 추상으로 번역된다. 이에 대한 정의는 뒤에서 내리도록 하고 지금 단계에서는 abstract라는 것이 상속을 강제하는 일종의 규제라고 생각하자. 즉 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이 abstract다. 상속해서 사용하도록 강제 ! 사용자가 직접 예쁘게 디자인 해야하는 부분은 abstract로 선언한다. + 상속 강제 추상 메소드 추상 메소드란 메소드의 시그니처만이 정의된 비어있는 메소드를 의미한다. 아래의 코드를 보자. package org.opentutorials.javatutorials.abstractclass.example1; abstract class A{ public abstract int b(); //본체가 ..
Homework_W3
2020. 3. 31. 16:48
📌 java/Object-oriented Programming
OOP Lab3: Due Date: April 05, 2020 · Submit your assignment using the following file format: Week_Number_StudentID_ Name.zip (eg. W3_201721057 _Hongkildong.zip). · This zip file will contain source code file to answer programming questions. I. Objectives (total score: 15) III. Programming Problems 1. Problem Description We want to develop a program which manages the purchasing of products. There..
java - accesor, mutator
2020. 3. 31. 13:00
📌 java/Object-oriented Programming
1. 캡슐화란? 데이터를 숨기는 것. 클래스 외부에서 데이터에 접근할 수 없도록 하는 것을 캡슐화라고 합니다. 이것을 위해 알아야 하는 것이 접근자입니다. public 모든 클래스에서 접근 가능 private 해당 클래스에서만 접근 가능 protected 해당 클래스에서 접근 가능 해당 클래스를 상속받은 클래스 접근 가능 같은 package에서 접근 가능 외부 클래스 접근 불가능 보통 인스턴스 변수는 private으로 메소드는 public을 사용합니다. 2. accessor accessor는 보통 게터(getter)라고 부르며 인스턴스 변수의 값을 리턴하는 역할을 합니다. 3. mutator mutator는 보통 세터(setter)라고 부르며 인스턴스 변수의 값을 설정하는 역할을 합니다. Dog클래스입니..