전체 글
[Java] @Annotation, 어노테이션
@어노테이션 /** *어노테이션 주석 *내부에 javadocs 문서에 대한 내용을 작성 */ /** @author 개발자 @param 매소드의 매개변수 @return 메소드의 리턴값 @exception 메소드에서 발생하는 예외 @throws throws 에 대한 설명 @see 참고할만한 링크 @since 사용 가능한 JDK 버전 @version 클래스의 버전정보 */
[Java] Java API(Application Programming Interface)
API (Application Programming Interface) 응용 프로그래밍 인터페이스 -> Java API: 자바 시스템을 제어하기 위해서 자바에서 제공하는 명령어들을 의미 java.lang : java 프로그래밍을 위한 가장 기본적인 패키지와 클래스 포함 String, int, etc java.util : java 프로그래밍을 제어하기 위한 클래스와 데이터를 효율적으로 저장하기 위해서 쓰이는 클래스 포함 Scanner java.io : 키보드, 모니터, 프린터, 파일 등을 제어할 수 있는 클래스들을 포함 io -> Input/Output 을 의미 //출력과 java.net : 통신을 위한 기능이 있는 클래스들을 포함 API의 종류는 굉장히 많고, 다양하기 때문에 모두 외우는 것은 불가능하기..
[Java] 예외처리 try-catch-finally / throw throws 차이점 및 예제
예외처리 에러 : 심각한 오류 예외 : 덜 심각한 오류(객체) try ~ catch ~ finally 예외처리문 try{ 예외가 발생할 수 있는 문장 } catch(예외클래스명 객체명){ 예외 발생시 수행할 문장 } ... finally{ 예외 발생 유무에 상관없이 무조건 실행할 문장 } 예외라는 틀(class)을 잡아놓은 객체가 있다 Exception class 모든 예외들의 부모클래스 모든 예외들은 Exception class의 자식클래스이기 때문에 자동으로 업캐스팅 upcasting 이 이루어짐 어떤 예외가 발생하든지 Exception 타입으로 잡을 수 있다. 어떤 예외가 발생할지 모를 떄 찾아내는 역할 try{ 예외가 발생할 수 있는 문장 } catch(Exception e){ System.out..
[Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class
내부 클래스(Inner class) 클래스 내부에 클래스를 선언하여 외부 클래스의 필드에 쉽게 접근하기 위해서 사용한다. 다른 곳에서 볼 때에는 그 내부에 있는 클래스는 숨겨진 것처럼 보이게 된다. 내부 클래스의 필드를 사용(객체화)하기 위해서는 외부클래스의 객체에서 내부클래스를 객체화해야한다. 외부클래스의 필드에서는 자신이랑 같이 올라와 있는 내부클래스를 바로 객체화 할 수 있다. 외부클래스명 객체명 = new 외부클래스 생성자(); 외부클래스명.내부클래스명 객체명 = 외부클래스객체.new 내부클래스 생성자(); 굉장히 복잡하므로, 객체를 직접 만들지 말라는 뜻이다.(드물게 사용) Ex) 내부클래스 사용 예 일반클래스 상속 public class InnerTest { public static void ..
[Java] 인터페이스 interface, 다중 상속, 마크 인터페이스
인터페이스(interface) 틀이 극대화 추상클래스를 고도화시킨 문법, 반드시 추상메소드와 상수만 선언해야 한다. 구현이 되어 있는 것이 없음(틀의 역할만 함) 다른 클래스에서 인터페이스를 지정받을 때 implements를 사용함 틀로 받아 올 수 있는 interface의 개수에 제한이 없다. 지정 받은 클래스는 인터페이스가 가지고 있는 추상 메소드를 반드시 재정의해야한다. 인터페이스는 상수와 추상메소드만 존재하므로 그냥 선언해도 상수와 추상메소드로 선언됨. public static final 상수 : static final 생략가능 abstract 리턴타입 함수명 : abstract 생략가능 interface에는 public 이 필수 jdk 8버전 이후부터는 인터페이스에 default 메소드를 선언할..
[Java] 추상클래스 abstract class, final
추상 클래스 클래스들의 틀 (틀 자체의 틀) 추상적인 내용만 정의하고 있는 클래스로, 구체적인 내용은 상속받아서 하위클래스에서 구현되도록 설계된 클래스이다. 추상 클래스(부모)는 클래스(자식)의 공통 요소들을 가상화시켜놓기 때문에 객체화시 구현(재정의)을 꼭 해야한다. 부모 추상 클래스의 역할은 단지 자식 클래스들을 만들 때 도와주는 역할을 수행한다. 자식 클래스에서 만들어질 메소드의 이름과 형태만 가지고 있다. 메소드에 {}바디가 없다. 이런 메소드를 추상 메소드라고 하며 abstract 키워드가 리턴타입 앞에 붙는다. 추상 메소드가 하나라도 포함되어 있다면 추상 클래스로 만들어야 한다. 추상 클래스 선언 abstract class 추상클래스명{ abstract 리턴타입 추상메소드명(); 리턴타입 일반..
[Java]접근 권한 제어자 public, private, protected, default / getter, setter
접근 권한 제어자 다른 패키지 혹은 다른 클래스에서 해당 필드에 접근할 수 있는 범위(권한)을 설정해주는 키워드 (default) : 다른 패키지에서 접근 불가 public : 모든 곳에서 접근 가능 private : 다른 클래스에서 접근 불가 데이터 전송할 때, 보안을 위해서 설정(보통 데이터는 private 사용) 직접 접근할 방법이 하나도 없기 때문에 public 메소드를 통해서 간접적으로 접근할 수 있도록 한다. 값을 사용하는 경우 : getter / 수정하는 경우 : setter protected : 다른 패키지에서 접근 불가 / 단, 자식은 자기 필드처럼 사용가능 getter setter public 메소드를 통해 private 에 접근할 수 있도록 하는 기법 public class Test{..
[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof
전제조건: 상속의 관계에 있어어야 함 Up casting (업캐스팅) 부모 타입의 객체에 자식 클래스의 필드를 담아주는 것 부모 타입의 객체에 자식 생성자를 호출 필드의 사용 범위가 부모타입만큼 제한 되기 때문에 자식 클래스에서 추가된 내용은 사용할 수 없다. 단, 오버라이딩 된 메소드는 사용가능 자식필드는 존재하지만, 사용불가능인 개념 부모클래스 객체명 = new 자식생성자(); Car mycar = new SuperCar(); Down casting (다운캐스팅) 업 캐스팅 된 객체를 다시 자식타입으로 바꾸는 기법 업캐스팅이 되지 않은 객체는 다운캐스팅 불가능 업 캐스팅 된 객체에 다시 자식클래스의 필드를 달아주는 것 업 캐스팅시 잘려나갔던 자식 클래스의 내용들을 다시 사용할 수 있게 하려면 자식 클..
[Java] static (정적) : 모든 객체가 공유
static (정적) static이 붙은 변수, 메소드, 구역 등은 프로그램 실행시 가장 먼저 메모리에 올라간다. static 이 붙은 전역변수, 메소드는 모든 객체가 공유한다. static 이 붙은 변수는 가장 먼저 메모리에 static 영역으로 이동한다. 객체 안의 static 변수일 경우, 객체가 선언될때 객체 안에서 제외된채 생성되고, 메모리의 static 영역에 저장되며, 그것을 공유한다. static 이 붙은 메소드는 내부에서 각 객체의 필드에 올라오는 일반 전역변수와 일반 메소드는 사용할 수 없다.(아직 메모리에 올라오지 않았기 때문에 - static 은 가장 먼저 올라오기 때문에) public static void main(String[] args){}' 메인은 가장 먼저 메모리에 ..
[Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩)
다형성(Polymorphism) 오버로딩 같은 이름의 메소드를 여러 개를 선언하는 기법이다. 매개변수의 개수 혹은 타입이 다르면 같은 이름의 메소드로 여러개 선언할 수 있다. 이름이 아니라 매개변수로 구별이 가능하다. 전달된 값의 타입 혹은 개수로 알아서 구분하여 알맞은 메소드가 자동으로 호출된다. //overloading void dog(){ System.out.println("매개변수 없음"); } void dog(int a, int b){ System.out.println("매개변수: " + a + b); } void dog(String c){ System.out.println("매개변수: " + c); } 오버로딩의 예 : 기본생성자와 매개변수가 있는 생성자가 동시에 있는 클래스 보통 기본생성자를..