목록Java (14)
RussellHouse
Exception 프로그래밍을 하면서 필연적으로 많은 오류 상황에 직면하게 된다. 이에 대해, 오류를 잘 처리하기 위한 방법이 필요했는데, 예외(Exception)란 프로그램을 만든 프래그래머가 상정한 정상적인 처리에서 벗어나는 경우에 이를 처리하기 위한 방법이다. 1234567891011121314151617181920package 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(){ System.out.print("계산결과는 ")..
Polymorphism 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 다형성은 객체나 인터페이스 또는 추상과 같이 철학적인 느낌을 자아내는 용어이다. 그래서 이 주제 또한 철학적이고 현학적인 느낌으로 여러분을 혼란스럽게 할 수 있으나 그것은 학습에 도움이 되지 않는다. 다형성이라는 것이 코드 상에서는 구체적으로 어떤 모습으로 드러나는지에 집중하자. 우선 코드를 보자.overloading과 다형성참고로 overloading이 다형성인지 아닌지에 대해서는 이견이 존재하는 것으로 보인다. 오버로딩은 가장 이해하기 쉬운 다형성의 예라고 할 수 있다. 아래의 코드를 보자.123456789101112131415161718package org.opentutorials...
Interface 협업이 필수인 오늘과 같은 시대에 커뮤니케이션은 중요하다. 하지만 이러한 과정속에서도, 잘못된 커뮤니케이션으로 인하여 오류가 발생한다. 이를 보완하기 위한 한 가지 규제 도구로 Interface가 있다. 즉, 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 해당 애플리케이션은 컴파일조차 되지 않는다. 다음 예제를 보자. 123456789package org.opentutorials.javatutorials.interfaces.example1; interface I{ public void z();} class A implements I{ public void z(..
Final 우리는 지금까지 상속을 강제하는 abstract에 대하여 알아봤다. 그렇다면 특정 항목의 상속이나 변경을 금지하도록 규제를 걸 수는 없을까? 우리는 이를 final을 통해 실천할 수 있다. 다음 예제를 보자. 123456789101112131415161718192021222324252627282930313233package org.opentutorials.javatutorials.finals; class Calculator { static final double PI = 3.14; int left, right; public void setOprands(int left, int right) { this.left = left; this.right = right; //Calculator.PI = 6..
Abstract "이러한 내용들을 포함하도록 강제하시오." 그렇다면, java에서 특정 내용의 상속을 강제하는 방법은 없을까? 이러한 경우, 추상 메소드(Abstract)를 이용하면 된다. 이는 클래스나 메소드를 사용하기 위해서, 반드시 특정 사항을 사용하도록 강제하는 것을 의미한다. 추상 메소드란 메소드의 시그니쳐만이 정의된 비어있는 메소드를 의미한다. 아래의 예시를 보자. 123456789101112131415package org.opentutorials.javatutorials.abstractclass.example1;abstract class A{ public abstract int b(); //본체가 있는 메소드는 abstract 키워드를 가질 수 없다. //public abstract int ..
Access Controler 접근 제어자는 클래스의 멤버(변수와 메소드)들의 접근 권한을 직접적으로 지정해준다. 자세한 것은 아래 사항을 보자. 123456789101112131415161718192021package org.opentutorials.javatutorials.accessmodifier;class A { public String y(){ return "public void y()"; } private String z(){ return "public void z()"; } public String x(){ return z(); }}public class AccessDemo1 { public static void main(String[] args) { A a = new A(); System...
API&API document 그렇다면 우리가 지금까지 특정 값을 출력하기 위해 사용해온 1System.out.println(1); 은 무엇일까? system은 클래스를, out은 그 클래스의 필드(변수)이다. println은 메소드에 해당된다. 해당 필드가 메소드를 가지고 있으므로, 이 필드는 객체라는 것을 알 수 있으며, system을 인스턴스화한적이 없음에도 불구하고 필드 out에 접근할 수 있는 것은 out이 static이라는 것을 암시한다. 이와 같은 System 클래스는 아래의 예시에서 볼 수 있듯이 java.lang이라는 패키지에 속한다. 123456package org.opentutorials.javatutorials.library;public class LibraryDemo1 { publ..
Package 이름의 충돌을 피하기 위해, class, directory 등 여러가지가 고안되었으며, 그 중에는 패키지도 존재한다. 1.12package org.opentutorials.javatutorials.packages.example1;public class A {} 2.1234567package org.opentutorials.javatutorials.packages.example1; public class B { public static void main(String[] args) { A a = new A(); }} 2번은 정상적으로 실행된다. 12345678package org.opentutorials.javatutorials.packages.example2; public class B { ..
Classpath ClasspathDemo.java 12345class Item{} class ClasspathDemo {} 위의 파일을 컴파일 할 경우, 하나가 아닌 두개의 파일 ClasspathDemo.class 와 item.class 2개의 파일이 생성된다. 즉 클래스 하나는 하나의 클래스 파일이 된다. 123456789101112class Item2{ public void print(){ System.out.println("Hello world"); }} class ClasspathDemo2 { public static void main(String[] args){ Item2 i1 = new Item2(); i1.print(); }} 위의 파일을 실행할 경우, item2.class와 Classpa..
Overloading 이전의 계산기 예제에서 2개의 인자 값이 아닌, 3개의 인자 값을 받고 싶은 경우는 어떻게 해야할까? 아래와 같이 해야할까? 12345public void setOprands(int left, int right, int third){ this.left = left; this.right = right; this.third = third;} 이것도 나쁘지 않은 방법이지만, 매개변수의 수에 따라 메소드의 이름이 달라지는 것은 달갑지 않은 방법이다. 그럼 어떻게 해야할까? 이럴 때, Overload를 사용할 수 있다. overload의 구체적인 예시는 아래와 같다. 1234567891011121314151617181920212223242526272829303132333435363738394..