국비학원 2주차) Java + Java Script

oatraspberry·2022년 9월 26일
post-thumbnail

🐣

6일차

[Java]

객체

  • 객체: 의사나 행위가 미치는 대상. 구체적, 추상적 데이터 단위
    속성(필드(field))+동작(메소드(method))로 구성
  • 클래스: 객체에 대한 속성과 기능을 코드로 구현한 것
    "클래스를 정의한다"라고 함
(접근 제어자)  class 클래스 이름{
	멤버 변수;
    메서드;
}
  • 객체 간의 관계
    • 집합 관계: 부품과 완성품의 관계
    • 사용 관계: 객체 간의 상호작용
    • 상속 관계: 상위(부모)객체를 기반으로 하위(자식)객체를 생성
  • 객체 지향 프로그래밍: 집합/사용 관계에 있는 객체를 하나씩 설계한 후 조립하여 프로그램 개발

클래스

  • 객체를 정의해 놓은 것

  • 객체를 생성하는데 사용, 객체를 만들기 위한 설계도

  • 인스턴스: 특정 클래스로부터 만들어진 객체(ex: TV인스턴스)

  • 클래스 선언
    - 객체 구상 후 클래스 이름을 결정

    • 하나 이상의 문자로 이루어질 것
    • 첫 글자에는 숫자가 올 수 없음
    • $, _ 외의 특수문자는 사용할 수 없음
    • 자바 키워드는 사용할 수 없음
  • 용도

  1. 라이브러리(API) 클래스: 객체 생성 및 메소드 제공 역할
  2. 실행 클래스: main() 메인 메소드 제공 역할

클래스 멤버

public class ClassName {
// 필드 = 객체의 데이터가 저장되는 곳
int fieldname;

// 생성자 = 객체 생성 시 초기화 역할 담당
ClassName() { ... }

// 메소드 = 객체의 동작에 해당하는 실행 블록
void methodName() {...}
}

클래스(설계도) → 인스턴스화(제품 생성) → 인스턴스(객체, 제품)
클래스 == 데이터 + 함수

  • 변수: 하나의 데이터를 저장할 수 있는 공간
    배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
    구조체: 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간
    클래스: 데이터와 함수의 결합(구조체+함수)

사용자 정의 타입 - 원하는 타입(클래스)을 직접 만들 수 있다.

public class Hello2 {
	// 소스파일의 이름은 public class이름과 일치
	// 하나의 소스파일에는 하나의 클래스만 작성하는 것이 바람직
	// 하나의 소스파일에는 하나의 public class만 허용
	public static void main(String[] args) {
		System.out.println("Hello");
	}
}
  1. 객체의 생성
    클래스명 변수명;
    변수명 = new 클래스명();
Tv t;
t = new Tv();
  1. 객체의 사용
t.channel = 7;
t.channelDown();
System.out.println("현재 채널은 " + t.channel + " 입니다.");

객체 배열

객체 배열 == 참조변수 배열

Tv tv1, tv2, tv3; → Tv[] tvArr = new Tv[3];
Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv타입의 참조변수 배열

// 객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

Tv[] tvArr = { new Tv(), new Tv(), new Tv() };

필드

  • 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 데이터 등을 저장
  • 필드를 선언하고 생성한 뒤 이를 읽고 변경하는 방법을 학습

필드 선언

  • 클래스 중괄호 블록 어디서든 존재 가능.
  • 생성자와 메소드 중괄호 블록 내부에는 선언 불가
  • 변수와 선언 형태 유사하나 변수 아님에 주의.
  • 초기값은 주어질 수도, 생략할 수도 있음. 초기값 지정되지 않은 필드는 객체 생성 시 자동으로 기본 초기값 설정.

생성자

  • 생성자는 new 연산자로 호출되는 중괄호{} 블록이다. 객체 생성 시 초기화를 담당한다.
  • 객체 초기화: 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것.
  • 기본 생성자(default constructor): 클래스 내부에 생성자 선언을 생략할 경우 바이트 코드에 자동 추가
    클래스에 생성자 선언하지 않아도 new 생성자()로 객체 생성 가능
[public] class() { }
  • 생성자 선언
클래스(매개변수선언, ...) {
	// 객체의 초기화 코드
}
  1. 매개 변수 선언은 생략할 수도 있고 여러 개 선언할 수도 있음
public class Car {
	// 생성자
	Car(String model, String color, int maxSpeed) {...}
}
  1. 클래스에 생성자가 명시적으로 선언되었을 경우 반드시 선언된 생성자 호출하여 객체 생성
Car myCar = new Car("그랜저", "검정", 300);
  • 생성자의 필드 초기화
public class Korean {
// 필드
	String nation = "대한민국";
    String name;
    String ssn;
    
// 생성자
	public Korean(String n, String s) {
    	name = n;
        ssn = s;
    }
}
  • 매개 변수 이름은 필드 이름과 유사하거나 동일한 것 사용 권장

  • 필드와 매개 변수 이름 완전히 동일할 경우 this.필드로 표현
    this.필드: 객체 자신의 참조. this라는 참조 변수로 필드를 사용하는 것과 동일함

  • this() 코드

    • 생성자에서 다른 생성자 호출
    • 필드 초기화 내용을 한 생성자에만 집중 작성하고 나머지 생성자는 초기화 내용 가진 생성자로 호출
    • 생성자 오버로딩 증가 시 중복 코드 발생 문제 해결
    • 생성자 첫 줄에서만 허용
클래스( [매개변수, ...] ) {
	this(매개변수, ..., 값, ...); // 클래스의 다른 생성자 호출
    실행문;
}

클래스 변수와 인스턴스 변수

class Card {
	String kind; // 무늬
    int number;  // 숫자
    
    // 개별 iv
    
    static int width = 100;   // 폭
    static int height = 250; // 높이
	// 공통 cv
}

Card c = new Card();  // 객체 생성
c.kind = "HEART";     // 객체 사용
c.number = 5; 		  // iv
Card.width = 200;
Card.height = 300;		  // cv - 객체 생성없이 사용 가능

메소드

  • 메소드: 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것.
    • 사용하는 이유
    1. 높은 재사용성
    2. 중복된 코드의 제거
    3. 프로그램의 구조화
  • 함수: 하나의 기능을 수행하는 일련의 코드
    중복되는 기능은 함수로 구현하고 함수를 호출하여 사용함
    클래스에 독립적이다.
  • 메소드를 통해 객체들이 상호작용
  • 메소드 호출: 객체가 다른 객체의 기능을 이용하는 것

메소드 선언부

  • 리턴 타입: 메소드가 리턴하는 결과의 타입 표시

    • 메소드를 실행한 후의 결과값의 타입
    • 리턴값 없을 수도 있음
    • 리턴값 있는 경우 리턴 타입이 선언부에 명시
  • 메소드 이름: 메소드의 기능 드러나도록 식별자 규칙에 맞게 이름 지음

    • 숫자로 시작하면 안 되고, $와 _ 제외한 특수문자 사용 불가
    • 메소드 이름은 관례적으로 소문자로 작성
    • 서로 다른 단어가 혼합된 이름일 경우 뒤이어 오는 단어의 첫 글자를 대문자로 작성
  • 매개 변수 선언: 메소드 실행할 때 필요한 데이터 받기 위한 변수 선언

    • 메소드 실행에 필요한 데이터를 외부에서 받아 저장할 목적
  • 메소드 실행 블록: 실행할 코드 작성

  • 매개 변수의 개수를 모를 경우

    • 매개 변수를 배열 타입으로 선언

      int sum1(int[] values) { }
      
      int[] values = {1, 2, 3};
      int result = sum1(values);
      int result = sum1(new int[] {1, 2, 3, 4, 5});
    • 배열 생성하지 않고 값의 목록만 넘겨주는 방식

      int sum2(int ... values) { }
      
      int result = sum2(1, 2, 3);
      int result = sum2(1, 2, 3, 4, 5);
      
      int[] values = {1, 2, 3};
      int result=sum2(values);
      int result=sum2(new int[] {1, 2, 3, 4, 5});
  • 리턴(return)문
    리턴문이란? 실행 중인 메소드를 종료하고 호출한 곳으로 되돌아가게 함.
    - 리턴값이 있는 메소드

     	- 메소드 선언에 리턴 타입 있는 메소드는 리턴문 사용하여 리턴값 지정

    return 리턴값;
    - return문의 리턴값은 리턴타입이거나 리턴타입으로 변환될 수 있어야 함.
    - 리턴값이 없는 메소드: void

        - void 선언된 메소드에서 return문 사용하여 메소드 실행 강제
        `return;`

    반환 타입이 void일 경우엔 생략 가능하고 컴파일러가 자동 추가된다.
    반환 타입이 void가 아닐 경우엔 반드시 return문이 필요하다.

매개변수

  • 기본형 매개변수: 변수의 값을 읽기만 할 수 있다.
  • 참조형 매개변수: 변수의 값을 읽고 변경할 수 있다.

함수 호출방식

정의된 함수를 호출하는 것.
함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
함수에 정의한 매개변수의 형태에 따라 두가지로 결정된다.

  • Call-by-value
    - 값에 의한 호출
    - int, short, long, float, double, char, boolean, byte

  • Call-by-reference

    • 참조에 의한 호출
    • Array, Class Instance
  • 기본 자료형을 입력매개변수로 전달하면 전달받은 메서드는 값을 복사해 사용한다.

  • 참조 자료형을 입력매개변수로 넘겼을 때도 입력매개변수로 넘겨진 변수의 스택 메모리값이 복사돼 사용되는 것은 동일하지만, 참조 자료형은 스택 메모리에 객체의 참좃값(위칫값)을 저장하고 있으므로 실제 객체가 아닌 객체의 참좃값이 전달돼 복사된다.

재귀호출

메소드 내부에서 메소드 자신을 다시 호출하는 것.
재귀호출을 하는 메소드를 재귀 메소드라고 함.
대표적인 재귀호출의 예는 팩토리얼(factorial)을 구하는 것이다.
팩토리얼: 한 숫자가 1이 될 때까지 1씩 감소시켜가면서 계속 곱해나가는 것. ex) 5! = 54321 = 120

f(n) = n * f(n-1), 단 f(1) = 1
class FactorialTest {
	public static void main(String args[]) {
    	int result = factorial(4);
        
        System.out.println(result);
   }
   
   static int factorial(int n) {
   		int result = 0;
        
        if ( n == 1 )
        	result = 1;
        else
        	result = n * factorial(n-1); // 다시 메소드 자신 호출
        return result;
	}
}

오버로딩

메소드 시그너처(method signature): 메소드명, 입력매개변수의 자료형. 메소드를 구분하는 기준 역할.

오버로딩: 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것.
매개값을 다양하게 받아 처리할 수 있도록 하기 위함

  • 조건
  1. 메서드의 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 매개 변수의 타입, 개수, 순서가 같은 경우 매개변수 이름이 달라도 메소드 오버로딩이 아니다.

외부에서 제공되는 다양한 데이터 사용하여 객체 초기화하려면 생성자 역시 다양화해야 함.

리턴 타입 메서드명 (자료형 변수명, 자료형 변수명, ...) {
}
// 메서드명, 자료형, 자료형 -> 메소드 시그너처

int sum (int a, int b) {
	return 3;
} // sum, int, int -> 메소드 시그너처

🐣

7일차

[Java Script]-HTML5

HTML 웹페이지 기본구조와 작성방법

freeCodeCamp
백준

[Java]

인스턴스 멤버와 정적 멤버

  • 인스턴스 멤버: 객체를 생성한 후 사용할 수 있는 필드와 메소드

    • 인스턴스 필드: 힙 영역의 객체마다 가지고 있는 멤버. 객체마다 다른 데이터를 저장
    • 인스턴스 메소드: 객체가 있어야 호출 가능한 메소드. 클래스 코드(메소드 영역)에 위치함.
  • 정적(static) 멤버
    클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드
    객체와 상관없는 멤버, 클래스 코드(메소드 영역)에 위치

    • 정적 필드 및 상수: 객체없이 클래스만으로도 사용 가능한 필드

    • 정적 메소드: 객체가 없이 클래스만으로도 호출 가능한 메소드

      • 정적 메소드 선언 시 주의할 점
      1. 정적 메소드 선언 시 그 내부에 인스턴스 필드 및 메소드 사용 불가
      2. 정적 메소드 선언 시 그 객체 자신 참조인 this 키워드 사용 불가
      3. 정적 메소드에서 인스턴스 멤버 사용하려는 경우: 객체 우선 생성 후 참조 변수로 접근
       static void Method3() {
       	ClassName obj = new ClassName();
           obj.field1 = 10;
           obj.method1();
      	}
    • 정적 멤버 사용: 클래스 이름과 함께 도트 연산자로 접근

클래스.필드;
클래스.메소드(매개값, ...);

인스턴스 멤버와 정적 멤버 선택 기준

  • 객체마다 다를 수 있는 필드값 -> 인스턴스 필드로 선언
  • 객체마다 다를 필요가 없는 필드값 -> 정적 필드로 선언
  • 메소드 블록에 인스턴스 필드 또는 인스턴스 메소드를 사용할 경우 -> 인스턴스 메소드로 선언.
  • 그렇지 않을 경우 -> 정적 메소드로 선언.

this

객체 내에서 인스턴스 멤버에 접근하기 위해 사용
생성자와 메소드의 매개 변수 이름이 필드와 동일할 경우, 필드임을 지정하기 위해 주로 사용

싱글톤

전체 프로그램에서 단 하나의 객체만 만들도록 보장하는 코딩 기법
싱글톤 작성 방법

  • 클래스 외부에서 new 연산자 통해 생성자 호출하는 것 불가하도록 private 접근 제한자 사용
  • 자신의 타입인 정적 필드 선언 후 자신의 객체 생성해 초기화
  • 외부에서 호출할 수 있는 getInstance() 선언
  • 정적 필드에서 참조하는 자신의 객체 리턴

final 필드

초기값이 저장되면 최종값이 되어 프로그램 실행 도중 실행 불가

final 필드의 초기값 주는 방법

  • 단순 값일 경우 필드 선언 시 초기화(주로 정적 필드(상수)일 경우)
  • 객체 생성 시 외부 데이터로 초기화 필요한 경우 생성자에서 초기화(주로 인스턴스 필드일 경우)

인스턴트 final 필드

  • 객체에 한번 초기화된 데이터를 변경 불가로 만들 경우: ex) 주민번호
final 타입 필드 [= 초기값];
final String ssn; // 생성자에서 초기화

정적 final 필드 (모두 대문자로 작성)

  • 불편한 값인 상수를 만들 경우: ex) PI
static final 타입 상수 = 초기값;
static final double PI = 3.14159;

패키지

패키지의 물리적인 형태는 파일 시스템의 폴더
패키지는 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할
클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식
클래스의 전체 이름은 패키지+클래스 사용해서 다음과 같이 표현한다.

상위패키지.하위패키지.클래스
com.mycompany.A
com.yourcompany.B
  • 패키지 선언
    클래스 작성 시 해당 클래스가 어떤 패키지에 속할 것인지를 선언

  • 패키지 이름 규칙

  1. 숫자로 시작 불가
  2. _ 및 $ 제외한 특수문자 사용 불가
  3. java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용 불가
  4. 모두 소문자로 작성하는 것이 관례
package 상위패키지.하위패키지;

public class Classname {...}

package com.mycompany;

public class Car {...}

import문

사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속된 경우
해당 패키지 클래스 또는 인터페이스를 가져와 사용할 것임을 컴파일러에 통지

import 상위패키지.하위패키지.클래스이름;
import 상위패키지.하위패키지.*; // 사용하고자 하는 클래스가 여러개라면 *로 표현

패키지 선언과 클래스 선언 사이에 작성

package com.mycompany;

import com.hankook.Tire;

public class Car {
 Tire tire = new Tire();
}

하위 패키지는 별도로 import 해야 함

import com.hankook.*;
import com.kankook.project.*;

다른 패키지에 동일한 이름의 클래스가 있을 경우: import와 상관없이 클래스 전체 이름을 기술

접근 제한자(access modifier)

클래스와 인터페이스 및 이들이 가진 멤버의 접근 제한

  • public 접근 제한자
    • 외부 클래스가 자유롭게 사용할 수 있도록 함
  • protected 접근 제한자
    • 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 함
  • private 접근 제한자
    • 외부에서 사용할 수 없도록 함
  • default 접근 제한
    • 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 함

클래스 접근 제한

같은 패키지 내에서만 사용할 것인지 다른 패키지 내에서도 사용할 수 있도록 할 것인지 결정

Getter/Setter

필드 값을 외부로 리턴하는 메소드: Getter (getXXX(), isXXX())
외부에서 값을 받아 필드값을 변경하는 메소드: Setter (setXXX())

상속

이미 개발된 클래스를 재사용하여 새로운 클래스를 만들기에 중복되는 코드를 줄임
부모 클래스의 한번의 수정으로 모든 자식 클래스까지 수정되는 효과가 있어서 유지보수 시간이 줄어듦.

public class A {
	int field1;
    void method1() { ... }
}

public class B extends A { // A를 상속
	String field2;
    void method2() { ... }
}
  • 클래스 상속
    자식 클래스 선언 시 부모 클래스 선택
    extends 뒤에 부모 클래스 기술
    여러 개의 부모 클래스 상속할 수 없음.
    부모 클래스에서 private 접근 제한 갖는 필드와 메소드는 상속 대상에서 제외.
    부모와 자식 클래스가 다른 패키지에 존재할 경우, default 접근 제한된 필드와 메소드 역시 제외됨.
class 자식클래스 extends 부모클래스 {
	//필드
    //생성자
    //메소드
}

class SportsCar extends Car {
}
  • 부모 생성자 호출

    • 자식 객체 생성할 때 부모 객체가 먼저 생성되고 그 다음 자식 객체가 생성됨

      			DmbCellPhone dmbCellPhone = new DmbCellPhone();
    • 자식 생성자의 맨 첫 줄에서 부모 생성자가 호출됨

      public DmbCellPhone() {
      	super();
      }
      
      public CellPhone() {
      }
    • 명시적으로 부모 생성자 호출하려는 경우

      자식클래스( 매개변수선언, ... ) {
      	super( 매개값, ... );
       	...
       }

메소드 재정의(오버라이딩/Overriding)

부모 클래스의 메소드가 자식 클래스에서 사용하기에 부적합할 경우 자식 클래스에서 수정하여 사용

  • 메소드의 재정의 방법
  1. 부모 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 목록) 가져야 함
  2. 접근 제한 더 강하게 재정의할 수 없음
  3. 새로운 예외를 throws 할 수 없음
  • 메소드가 재정의될 경우 부모 객체 메소드가 숨겨지며, 자식 객체에서 메소드 호출하면 재정의된 자식 메소드가 호출됨.

부모 메소드 호출

자식 클래스 내부에서 재정의된 부모 클래스 메소드를 호출해야 하는 경우
명시적으로 super 키워드 붙여 부모 메소드 호출

super.부모메소드();

final 키워드

  • 해당 선언이 최종 상태이며 수정될 수 없음을 의미
  • 클래스 및 메소드 선언 시 final 키워드를 사용하면 상속과 관련됨

다형성

  • 여러 가지 형태를 가질 수 있는 능력

  • 메소드 재정의와 타입 변환으로 구현

  • 자동 타입 변환

    • 프로그램 실행 도중 자동으로 타입 변환 일어나는 것
      Cat cat = new Cat();
      Animal animal = cat;
      		- 바로 위 부모가 아니더라도 상속 계층에서 상위 타입인 경우 자동 타입 변환 일어날 수 있음. 
    • 부모 타입으로 자동 타입 변환 이후에는 부모 클래스에 선언된 필드 및 메소드만 접근 가능
    • 예외적으로, 메소드가 자식 클래스에서 재정의될 경우 자식 클래스의 메소드가 대신 호출
    • 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
  • 필드의 다형성

    • 필드 타입을 부모 타입으로 선언할 경우
      다양한 자식 객체가 저장되어 필드 사용 결과가 달라질 수 있음.
  • 매개변수의 다형성

    • 매개 변수를 부모 타입으로 선언하는 효과
      메소드 호출 시 매개값으로 부모 객체 및 모든 자식 객체를 제공할 수 있음.
      자식의 재정의된 메소드가 호출->다형성
  • 강제 타입 변환(casting)

    • 부모 타입을 자식 타입으로 변환
      조건: 자식 타입이 부모 타입으로 자동 타입 변환한 후 다시 반대로 변환할 때 사용
  • instanceof 연산자

    • 어떤 객체가 어느 클래스의 인스턴스인지 확인
    • 메소드 내 강제 타입 변환 필요한 경우
      • 타입 확인하지 않고 강제 타입 변환 시도 시 ClassCastException 발생할 수 있음.
      • instaceof 연산자 통해 확인 후 안전하게 실행
        boolean result = 좌항(객체) instanceof 우항(타입)

🐣

8일차

[Java Script]-HTML5

HTML5 기본 태그

HTML5 목록 / 테이블

HTML5 미디어 태그

[Java]

추상 클래스

  • 실체 클래스(객체 생성용 클래스)들의 공통적인 특성(필드, 메소드)을 추출하여 선언한 것
  • 추상 클래스와 실체 클래스는 부모, 자식 클래스로서 상속 관계를 가짐

추상 클래스의 용도

  • 공통된 필드와 메소드의 이름을 통일할 목적
  • 실체 클래스를 작성할 때 시간 절약

추상 클래스 선언

  • 클래스 선언에 abstract 키워드를 붙여야 한다.
puclic abstract class 클래스 {
	// 필드
    // 생성자
    // 메소드
}
  • abstract 키워드: 상속을 통해 자식 클래스만 만들 수 있게 만듦.(부모로서의 역할만 수행)
  • 추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언할 수 있음.
  • 직접 객체를 생성할 수 없지만 자식 객체 생성될 때 객체화 됨.
    • 자식 생성자에서 super(...) 형태로 추상 클래스의 생성자 호출

추상 메소드

  • 메소드 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우
  • abstract 키워드로 선언되고 중괄호가 없는 메소드
  • 하위 클래스는 반드시 재정의해서 실행 내용을 채워야 함.
[public | protected] abstract 리턴타입 메소드이름(매개변수, ...);

인터페이스

  • 객체의 사용 방법을 정의한 타입이다.
  • 개발 코드는 인터페이스를 통해서 객체와 서로 통신한다.
  • 인터페이스의 메소드 호출하면 객체의 메소드가 호출된다.
  • 개발 코드를 수정하지 않으면서 객체 교환이 가능하다.
  • 다양한 객체를 동일한 방법으로 이용할 수 있다.
  • 인터페이스를 이용해서 다형성을 구현할 수 있다.

인터페이스 선언

  • .~java 형태 소스 파일로 작성 및 컴파일러 통해 ~class 형태로 컴파일된다.
  • 클래스와 물리적 파일 형태는 같으나 소스 작성 내용이 다르다.
  • 인터페이스는 객체로 생성할 수 없으므로 생성자를 가질 수 없다.
interface 인터페이스이름 {
	//상수
    타입 상수이름 = 값;
    
    //추상 메소드
    타입 메소드이름(매개변수, ...);
}

상수 필드(constant field) 선언

  • 데이터를 저장할 인스턴스 혹은 정적 필드 선언 불가
  • 상수 필드만 선언 가능
  • 상수 이름은 대문자로 작성하되 서로 다른 단어로 구성되어 있을 경우 언더바(_)로 연결한다.
public static final 타입 상수이름 = 값;

public interface RemoteControl {
	public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;

추상 메소드 선언

  • 인터페이스 통해 호출된 메소드는 최종적으로 객체에서 실행
  • 인터페이스의 메소드는 실행 블록 필요없는 추상 메소드로 선언

구현(implement) 클래스

  • 인터페이스에서 정의된 추상 메소드를 재정의해서 실행내용을 가지고 있는 클래스
  • 클래스 선언부에 implements 키워드를 추가하고 인터페이스 이름 명시
public class 구현클래스이름 implements 인터페이스이름 {
	// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}

인터페이스와 구현 클래스 사용 방법

  • 인터페이스 변수 선언하고 구현 객체를 대입

다중 인터페이스 구현 클래스

  • 객체는 다수의 인터페이스 타입으로 사용 가능
public class 구현클래스이름  implements 인터페이스A, 인터페이스B {
	// 인터페이스 A에 선언된 추상 메소드의 실체 메소드 선언
    // 인터페이스 B에 선언된 추상 메소드의 실체 메소드 선언

인터페이스 사용

  • 필드, 매개변수, 로컬변수의 타입으로 선언 가능
  • 필드 타입으로 사용될 경우: 필드에 구현 객체를 대입할 수 있다.
  • 매개변수타입으로 사용될 경우: new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있다.
  • 로컬변수타입으로 사용될 경우: 변수에 구현 객체를 대입할 수 있다.
  • 메소드의 매개변수타입으로 사용될 경우: 메소드 호출 시 구현 객체를 매개값으로 대입할 수 있다.

대입한 후에는 재정의된 구현 객체의 메소드를 호출할 수 있다.

중첩 클래스

  • 클래스 내부에 선언한 클래스
  • 바깥 클래스와 긴밀한 관계를 가짐

멤버 클래스

  • 클래스 멤버로서 선언되는 중첩 클래스

로컬 클래스

  • 생성자 또는 메소드 내부에서 선언되는 중첩 클래스
  • 생성자 또는 메소드가 실행할 때만 사용

인스턴스 멤버 클래스

  • 인스턴스 필드와 메소드만 선언 가능하고 정적 필드와 메소드는 선언할 수 없음

중첩 인터페이스

  • 클래스 내부에 선언한 인터페이스
  • 바깥 클래스와 긴밀한 관계를 가짐

익명 객체

예외처리


🐣

9일차

[Java Script]-HTML5

HTML5 입력 양식 태그

HTML5 문서 구조화


🐣

10일차

[Java Script]-HTML5

CSS 선택자

CSS3 선택자

CSS3 선택자와 단위

출처: 자바 완전 정복, 자바의 정석, 자바 프로그래밍 입문, 혼자 공부하는 자바
profile
개발자가 될테야

0개의 댓글