인터페이스 인터페이스(interface)는 일종의 추상클래스이며 추상클래스보다 추상화 정도가 더 높습니다. 추상클래스를 미완성 설계도로 비유한다면 인터페이스는 기본 설계도에 비유할 수 있습니다. 인터페이스는 다른 클래스 작성에 도움을 주거나 서로 무관한 클래스들에게 관계를 맺어줄 목적으로 사용됩니다. 인터페이스의 특징을 정리하면 다음과 같습니다. - class 키워드 대신 interface 키워드를 사용하여 정의- 인스턴스 생성 불가- 모든 멤버변수에는 public static final 제어자가 붙음 (생략 가능)- 모든 메서드는 public abstract 제어자가 붙음 (생략 가능) ※ 제어자 생략시 컴파일러가 자동으로 추가. 1.1 인터페이스의 생성 다음과 같이 class 키워드 대신 interf..
Language
추상클래스 추상클래스(abstract class)는 미완성 설계도로 비유할 수 있는 구체화되지 않은 클래스입니다. 미완성의 추상 메서드를 포함하고 있으며, 반드시 상속을 통해 완성한 후 사용할 수 있습니다. 따라서 추상클래스 자체로는 인스턴스 생성이 불가능합니다. 추상클래스는 추상메서드 외에도 일반적인 멤버변수와 메서드, 생성자도 포함합니다. 추상클래스의 특징을 정리하면 다음과 같습니다. - 클래스 앞에 abstract 키워드를 붙여서 정의- 인스턴스 생성 불가- 추상 메서드를 포함 (그 외 멤버변수, 메서드, 생성자도 포함 가능) 다음과 같이 클래스 앞에 abstract 키워드를 붙여서 추상클래스를 생성합니다. abstract class [클래스명] {// 클래스 내용} ※ 추상메서드가 없어도 클래스에..
다형성 다형성(polymorphism)는 상속과 함께 객체지향에서 중요한 요소 중 하나입니다. 다형성이란 여러 형태를 가질 수 있는 특성을 의미하며 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 구현한 기능입니다. 다음 예제를 통해 다형성에 대해 확인해보겠습니다. class Tv { boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class CaptionTv extends Tv { String text; void caption() {}; }위의 코드를 기준으로 다음과 같이 인스턴스를 생성하여 참조할 수..
제어자 1. 제어자 제어자(modifier)는 클래스, 변수, 메서드에 사용되며 부가적인 의미를 부여합니다. 크게 접근제어자와 그 외의 제어자로 구분합니다. 접근제어자 : public, protected, default, private그외제어자 : static, final, abstract, native, transient, synchronized 등 여러 제어자를 조합하여 사용하는 것이 가능하나, 접근제어자의 경우 하나만 선택해서 사용하도록 제한되어 있습니다. 1.1 static static은 '클래스', '공통'의 의미를 가지고 있습니다. 인스턴스가 아닌 클래스와 관련이 있기 때문에 인스턴스를 생성하지 않고 호출이 가능합니다. static은 멤버변수, 메서드, 초기화블럭에 사용이 가능하며 각 대상별로..
package & import 1. package 패키지(package)는 서로 관련된 클래스나 인터페이스를 그룹 단위로 묶은 것을 의미합니다. 또한 우리가 사용하는 클래스의 전체 이름(full name)은 패키지명까지 포함된 이름입니다. 패키지는 다음과 같이 작성하여 사용합니다. package 패키지명; 패키지의 특징을 정리하면 다음과 같습니다. - 많은 소스파일을 효율적으로 관리하기 위해 사용. - 모든 클래스는 반드시 하나의 패키지에 속해야 함. - 하나의 소스 파일에서 첫 문장으로 하나의 패키지 선언만 허용. - 물리적인 디렉터리이며 '.'을 구분자로 사용하는 계층구조. ※ 이름없는 패키지(unnamed package) 소스파일에 패키지를 지정하지 않을 경우 자바는 자동으로 이름없는 패키지에 해당..
super & super() 1. super super는 자식 클래스가 부모 클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조 변수입니다. 클래스 내의 멤버변수와 지역변수의 이름이 같을 경우 구분을 위해 this를 사용하듯이 부모 클래스와 자식 클래스의 멤버의 이름이 같을 경우 super를 사용합니다. this와 super는 인스턴스의 주소값을 저장하는데 static 메서드(클래스 메서드)와는 무관하게 사용됩니다. 다음 예제 코드를 통해 super에 대해 확인해보겠습니다.class JavaApp { public static void main(String[] args) { Child child = new Child(); child.childMethod(); } } class Parent { int x ..
Google Vision API(OCR) 설치 및 사용하기 Eclipse 및 Ubuntu 환경에서 Java 기반으로 Google Vision API를 설치하여 사용하는 방법에 대해 알아보겠습니다.Google Vision API는 이미지 컨텐츠 분석 기능을 제공하며 좀 더 자세한 내용은 아래 링크에서 확인하실 수 있습니다. https://cloud.google.com/vision/ 먼저 다음 링크를 참고하여 Google Cloud Platform 에서 Vision API 사용을 위한 설정을 해줍니다. https://cloud.google.com/vision/docs/quickstart Google API를 사용하기 위해서는 Google Cloud Platform으로 이동하여 다음과 같이 project se..
SSL 관련 Exception 해결하기 SSL(Secure Socket Layer)이 적용된 https 프로토콜 사이트에 대해 connection 구성시 발생하는 Exception의 해결방법에 대해 알아보겠습니다. 1. SSLHandshakeException Java에서 https 프로토콜로 remote 사이트에 연결시 다음과 같은 Exception이 발생하는 경우가 있습니다. javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) 위의 에러는 server와 client 간에 사용하는 SSL/TLS 버전이 맞지 않기 때문에 발생합니다.server가 ..
InstallCert를 사용하여 SSL/TLS Server 인증서 생성하기 Ubuntu 환경에서 Java InstallCert를 사용하여 SSL/TLS Server 인증서를 생성하는 방법에 대해 알아보겠습니다. Java를 사용하여 HTTPS로 remote 사이트에 연결시 다음과 같은 Exception이 발생합니다. Caused by: javax.naming.CommunicationException: simple bind failed: [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certp..