728x90

 

▶ 추상클래스(abstract)

몸체(=중괄호 ) 없는 메소드

중괄호{ } 없는 메소드

미완성된 클래스를 뜻함

선언되어 있지만 구현되지 않은 미완성의 메소드(추상 메소드)를 포함하고 있는 클래스일 때 반드시 abstract 키워드를 class 앞에 붙여 준다.

클래스 앞에 ‘abstract’ 키워드를 붙이면 추상 클래스가 생성되며, 객체를 생성할 수 없다는 점만 빼면 일반 클래 스와 다른 점이 없다

 

1.미완성 클래스

자체적으로 객체 생성 불가 → 반드시 상속하여 객체 생성

  1. abstract 메소드가 포함된 클래스는 반드시 abstract 클래스 abstract 메소드가 없어도

abstract 클래스 선언 가능 3. 클래스 내에 일반 변수, 메소드 포함 가능 4. 객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능

클래스로서의 객체 생성은 못 하지만, 새로운 클래스를 작성할 때 부모 클래스로 이용되며 새 클래스 작성을 위한 템플릿이 되어 상속 받은 클래스들의 규칙을 주는 용도로 사용 가능

abstract

추상, 추상개념, 추상의, 추상적인

abstract 붙은 클래스는 ‘추상클래스’라고 부름

abstract : 예약어

 

 

 

추상메소드

중괄호 없이 바로 세미콜론 ;

일반 메소드 : [접근제한자] [예약어] 반환형 메소드명( [매개변수] ) **{  }**

추상 메소드 : [접근제한자] abstract 반환형 메소드명( [매개변수] )  ;  

 

 

추상메소드를 왜 만들까?

나를 상속한 얘가 반드시 나를 만들 수 있도록(오버라이딩) 강제하기 위해서 만듬

상속 시, 반드시 오버라이딩 할 수 있도록 강제화

공통적 규약을 만들기 위해 쓰인다

 

오버라이딩 강제 why?

전화기면 모든 전화기는 전화통화는 가능해야하니 전화기능을 공통적으로 가져야만 한다

안에서 꼭 필요한 기능이 있으면 강제적으로 그 기능을 가지게 하므로 규약을 만드는 것

미완성 메소드

=추상메소드

미완성이라 static과 사용 불가

몸체(=중괄호)가 없다보니 미완성메소드

반드시 오버라이딩시키는 이유도 미완성이라 완성 시킬려고 하는 것

내 몸체 안에 추상클래스(=미완성클래스, 중괄호x)가 있을수 있다

추상클래스 자체를 객체로 만들어 사용할 수 있을까?

no

 

특징

1)자체적으로 객체생성 불가

객체생성은 안되나 참조변수로 활용은 가능

상속을 시켜서 객체를 만드는 건 가능

2)추상 메소드가 없어도 추상클래스 선언 가능

추상클래스는 꼭 추상메소드를 포함하고 있어야한다? no

3)추상 클래스 내에 일반 변수나 메소드 포함가능

 

유의사항

1)클래스에 abstract와 final 동시 사용 불가

abstract는 상속(extends)해야만 하고

final은 클래스에서 상속이 안된다는 것

둘이 완전 정반대

2)메소드에 abstract와 static 동시 사용 불가

abstract는 미완성 메소드인데 미완성 메소드를 static공유한다는건데

미완성 공유는 말이 안됨

3)abstract 메소드의 접근제한자로 private 불가능

미완성 메소드라 오버라이딩 해야되는데 private이면 오버라이딩 자체가 불가능하기에 논리가 안맞음

 

*추상 클래스의 상수는 static 선언이 필요

 

 


 

 

▶ 인터페이스(Interface)

상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체

메소드 통일성을 부여하기 위해 추상 메소드만 따로 모아놓은 것

상속 시 인터페이스 내에 정의된 모든 추상메소드 구현해야 함

공통적 규약을 만들기 위해 쓰이며, abstract보다 더 강력한 규약을 만들기 위해 사용함

abstract < Interface

*왜 그렇게 말할까?

추상 메소드만 작성할 수 있음

 

사용법

[접근제한자] interface 인터페이스명 { }

이 안에는 상수형 필드와 추상 메소드만 들어갈 수 있다

상수형 필드 : [public static final]

추상 메소드 : [public abstract]

[접근제한자] interface 인터페이스명 {
		// 상수도 멤버로 포함할 수 있음
		public static final 자료형 변수명 = 초기값; // 추상 메소드만 선언 가능

		[public abstract] 반환자료형 메소드명([자료형 매개변수]); // public abstract가 생략되기 때문에
		// 오버라이딩 시 반드시 public 표기해야 함
}

 

 

인터페이스 앞 수식어들을 생략할 수 있는 이유

어차피 들어갈 수 있는 수식어들이 한정되어 있고

없으면 어차피 인터페이스 자체가 존재 불가능이기 때문

 

 

특징

1)모든 인터페이스의 메소드는

상수형 필드와 추상메소드만 들어갈 수 있기 때문에 묵시적으로public static final, public abstract

2)변수는 묵시적으로 public static final,

따라서 인터페이스 변수의 값 변경 시도 시 컴파일 시 에러 발생

3)인터페이스 자체로 객체 생성 x

상속(implements)으로 객체생성 o (abstract의 상속은 extends)

참조변수로 사용 o

728x90
반응형
728x90

 

필드의 접근제한자(Access Modifiers)

접근할 수 있는 범위를 제한해주는 것

여기서 접근의 의미는 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버로의 접근을 의미

경우에 따라 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막아야하거나 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야 하는데 이때 필요에 따라 해당 종류의 접근 제한자를 사용한다

 

[접근제한자] [예약어] class 클래스명 {

  ( [ ]치면 생략가능 의미 )

 

 

 

필드의 예약어(reserved word)

예약어란 자바에 등록되어 있어서 의미가 약속되어 있는 단어를 뜻함

이미 프로그램 상에 특정 기능을 하도록 사용되기에, 이 단어들은 속성의 변수명, 메소드명으로 사용할 수 없다

     ex) for, do, try, catch, finally, extends, implements, import, instanceof ….

1.static

2.final

 

1.static

같은 타입의 여러 객체가 공유할 목적의 필드에 사용

프로그램 start시에 정적 메모리 영역에 자동 할당되는 멤버에 적용

public class Academy { 
	private static int temp1; 
}

 

2.final

하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어

변수 앞에 쓰면 변수는 상수가 되는 것

class 앞에 클래스 예약어로도 씀

public class Academy { 
    private final int TEMP1 = 100; 
    private int temp4;
}

 

728x90
반응형
728x90

 

println()

printf()

두가지로 추가 연습

 

728x90
반응형
728x90

 

다형성(Polymorphism)이란?

자식 클래스를 부모클래스로써 동작하도록 규제하는 기능

ParentClass obj = new ChildClass()

 

다형성(polymorphism)이란 하나의 객체여러 가지 타입을 가질 수 있는 것

자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수자식 클래스 타입의 인스턴스참조할 수 있도록 하여 구현

 

 

접근제어자(Access Modifers)

public

default

protected

private

클래스,메소드,변수를 사용자들이 아무거나 건드리지 못하게 제한하는 기능

유저가 건드리면 안되는 영역 또는 기능들제한하여 프로그램을 보호한다

ex)스마트폰 외부만 유저가 조작할 수 있게하고 내부는 제한하는 것

 

 

Final

내가 만든 클래스를 다른 사람이 더이상 상속하지 못하게 하고 싶을 때

메소드를 오버라이딩(Overriding)하게 하고 싶지않을 때

변수를 다른 사람이 마음대로 수정하게 하고 싶지 않을 때

이런 규제를 하고 싶다면 final을 사용

 

 

Abstract

final과 반대

클래스상속해서 사용하려는 사람에게 어떤 특정 메소드는 꼭 구현해라라고 강제하고 싶은 메소드가 있다면 사용

상속자가 직접 구현해야 하는 기능을 구현하도록 강제할 수 있다

Abstract Class Imcompletion

728x90
반응형
728x90

5.변수, 상수, 리터럴

 

변수(variable) : 하나의 값을 저장하기 위한 공간

상수(constant) : 번만 값을 저장 가능한 변수

  • 생성법 : 변수의 선언법과 같고 타입 앞에 final 추가해주면
  • 한번 값을 저장하면 수정 불가
  • 수정 시도시 에러 발생

리터럴(literal) : 자체로 값을 의미하는

  • 상수와 같은 개념. 상수와 구분하기 위한 용어

 

색깔별로 변수,상수,리터럴 구분한 예시

 

 

 

728x90
반응형

+ Recent posts