본문 바로가기

BackEnd/Java

(30)
구현 코드가 없는 인터페이스 (interface) 인터페이스(interface)는 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 하며 추상 메서드와 상수로만 이루어져 있고 구현된 코드가 없기 때문에 인터페이스로 인스턴스를 생성할 수도 없습니다. 인터페이스를 생성하려면 클래스를 생성할 때 처럼 패키지에서 마우스 우클릭 후 [New -> Interface]를 클릭하여 생성하며 간단한 계산기 인터페이스를 만들어보겠습니다. public interface Calc { double PI = 3.14; int ERROR = -999999999; int add(int num1, int num2); int substract(int num1, int num2); int times(int num1, int num2); int divide(int num1..
[기본 클래스] Object 클래스 우리는 지금까지 String, Integer와 같은 참조형 클래스를 사용하고 있었습니다. 이들 클래스는 java.lang 패키지에 속해있으며 String 클래스의 전체 이름은 java.lang.String입니다. 외부 패키지에 선언된 클래스를 사용할 때는 import문으로 해당 클래스의 패키지와 함께 선언해줘야 합니다. 그런데 import java.lang.String;이라는 문장을 써준 적이 없죠? 이 말인즉슨 import java.lang.*; 문장이 자동으로 추가되어 암묵적으로 사용할 수 있었던 것이었습니다. 오늘 이 글에서 다룰 JDK 기본 클래스는 Object 클래스입니다. Object 클래스는 모든 클래스의 최상위 클래스입니다. 모든 클래스는 Object 클래스를 상속받습니다. 상속받으려면 e..
enum (데이터 열거형 타입) enum이란 enumeration(열거, 목록)의 약자입니다. 자바에서는 enum을 같은 종류의 상수 집합으로 사용합니다. 일반적으로 상수를 선언할 때는 아래와 같습니다. private final static int KIM; private final static int CHOI; private final static int PARK; 일반 상수에서 배웠듯이 private final static 은 생략해도 상수가 기본적으로 생략하며 가질 수 있습니다. 상수를 관리할 때 자료형 상수 방식으로 상수를 선언하는 것 보다 enum 방식으로 관리하는 게 장점이 더 많습니다. enum FirstName { KIM, CHOI, PARK } 위 enum 방식은 최상단 일반적인 상수 선언했던 내용과 100% 동일합니다...
향상된 for문 (for each문) 향상된 for문 (for each문) 은 JDK 5.0 버전 이상부터 지원하는 문법입니다. 기본 문법 for(객체에서 꺼낸 데이터를 저장할 변수 선언 : 배열 등의 객체) { ... } 보통 배열이나 여러개의 값이 담긴 객체를 사용할 때 반복문을 씁니다. 일반적인 for문으로 구문을 작성하면 아래와 같습니다. String[] arr = {"칼", "스", "블", "로", "그"}; for(int i=0; i
추상화 (Abstract) 1. 추상 메서드 - 메서드 구현부(Body)가 없는 메서드 (실행할 코드가 없는 메서드) - 선언부 리턴 타입 앞 abstract 키워드 명시 - 이렇게 추상 메서드로 정의가 된 메서드를 포함하는 클래스는 반드시 추상클래스로 정의해야 함 기본 문법 [접근제한자] abstract 리턴타입 메서드명([파라미터...]); 2. 추상 클래스 - 인스턴스를 생성할 수 없는 클래스 - 클래스 내에 추상 메서드가 하나라도 존재할 경우 반드시 추상 클래스로 선언 - 서브 클래스는 반드시 추상 메서드를 구현(implements)해야 함 = 오버라이딩 방법과 동일 기본 문법 [접근제한자] abstract class 클래스명 { // 멤버변수, 상수 // 일반메서드, 추상메서드 } abstract class Abstrac..
상수 (final) 상수 (final) 란? - '변경의 마지막'이라는 의미로 사용되는 키워드 1. 변수에 final 키워드가 사용 될 경우 - 변수 값 변경 불가 - 반드시 초기화 코드가 포함되어야 함 - 초기화 코드를 포함하지 않는 변수를 blank final 변수라고 하며 생성자에서 반드시 해당 변수 초기화가 수행되어야 함 (= 주로 객체마다 다른 고정된 값을 사용해야 하는 경우) - 상수 이름의 규칙은 단어간의 구분 시 언더스코어(_) 기호 사용, 모두 대문자 (ex: MY_NAME) 2. 메서드에 final 키워드가 사용 될 경우 - 메서드 오버라이딩 불가 (슈퍼클래스의 메서드를 상속받아 그대로 사용하는 것은 가능) 3. 클래스에 final 키워드가 사용 될 경우 - 클래스 상속 불가 (해당 클래스의 인스턴스 생성..
동적바인딩과 다형성(polymorphism) * 동적바인딩이란? 상속 관계에서 업캐스팅 후 메서드를 실행할 때, 컴파일 단계에서의 실행 대상과 실행 단계에서의 실행 대상이 달라지는 것 즉, 참조 변수의 타입과 무관하게 실제 인스턴스의 메서드를 실행하는 것이다 * 다형성(polymorphism)이란? 하나의 참조변수로 여러 인스턴스를 참조할 수 있는 특성. 인스턴스를 업캐스팅하여 슈퍼클래스 타입으로 서브클래스의 멤버를 다루는 것 class Triangle extends Shape { @Override public void draw() { System.out.println("삼각형 그리기"); } } Triangle ta = new Triangle(); // 슈퍼클래스의 메서드를 상속받아 오버라이딩을 할 경우 코드의 통일성이 향상됨 ta.draw();..
같은 참조 타입인지 확인하는 instanceof 연산자 주로 업캐스팅, 다운캐스팅을 할 때 실제 instanceof 연산자를 통하여, 좌변의 객체(참조변수)가 우변 클래스의 타입과 같은 타입인지 판별하는 연산자이다 판별 결과가 true라면 형변환이 가능한 관계라는 것을 뜻한다 예문 Child c = new Child(); if(c instanceof Parent) { // c is a Parent? System.out.println("c는 Parent이다"); // 형변환이 가능한 true이니 업캐스팅 실시 Parent p = c; p.parentPrn(); } else { // false : 형변환이 불가능한 관계 System.out.println("응 c는 Parent 아니야"); } 형변환이 가능한지 이론적으로 관계를 따져볼 때 is-A 또는 has-A..