(1) 추상 클래스(abstract class)

 - 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다. 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의한다. 추상 클래스는 다음과 같은 형식으로 선언한다.

abstract class 클래스이름{
	...
	abstract 반환타입 메소드이름();
    ...
}

 이러한 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로, 인스턴스를 생성할 수 없다. 즉, 추 상클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 자식 클래스의 인스턴스를 생성할 수 있게 된다.

 

 (2) 인터페이스(interface)

 자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 되지만, 다중 상속을 할 경우에 메소드 출처의 모호성 등 여러가지 문제가 발생할 수 있어서 자바에서는 클래스를 통한 다중 상속을 지원하지 않는다. 그러나, 다중 상속의 이점을 버릴 수 없기에, 자바에서는 인터페이스를 통한 다중 상속을 지원한다. 

 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개역할까지 담당하는 일종의 추상클래스를 인터페이스라고한다. 인터페이스는 다음과 같이 선언한다.

접근제어자 interface 인터페이스이름 {
	public static final 타입 상수이름 = 값;
    ...
    public abstract 메소드이름(매개변수목록);
    ...
}

 -인터페이스의 구현

  인터페이스는 추상 클래스와 마찬가지고 자신이 직접 인스턴스를 생성할 수는 없다. 즉, 인터페이스가 포함하고 있는 추상메소드를 구현해 줄 클래스를 작성해야한다. 자바에서는 implements를 통해 인터페이스를 구현한다.

class 클래스이름 implements 인터페이스이름 { ... }

 (3) 인터페이스와 추상클래스의 비교

인터페이스
 - 구현하려는 객체 동작의 명세
 - 다중 상속 가능
 - implements를 이용하여 구현
 - 메소드 시그니처(이름, 파라미터, 리턴타입)에 대한 선언만 가능
 
추상클래스
 - 클래스를 상속받아 이용 및 확장을 위함
 - 다중 상속 불가능
 - extends를 이용하여 구현
 - 추상메소드에 대한 구현 가능

 - 접근 제어자란?

 멤버 변수/함수 혹은 클래스에 사용되며, 외부에서 접근을 제한하는 역할을 한다.

구분		설명
-----------------------------------
private		같은 클래스 내에서만 접근이 가능하다.
default		같은 패키지 내에서만 접근이 가능하다.
protected	같은 패키지내, 그리고 다른 패키지의 자식 클래스에서 접근이 가능하다.
public		접근 제한이 없다.

 

 - 상속(Inheritance)이란?

  쉽게 말해서, 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있으며, 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그래도 쓸 수 있게 된다. 즉, 상속은 이미 마련된 클래스를 재사용해서 만들 수 있기 때문에 효율적이게 코드를 관리할 수 있도록 한다. 상속을 하더라도 자식 클래스는 부모의 모든 것을 물려받는 것은 아니다

  - 부모 클래스의 private 접근 제한을 갖는 필드 및 메소드는 자식이 물려받을 수 없다.

  - 부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다.

 

 - 클래스의 상속

  상속 받고자 하는 자식 클래스명 옆에 extends 키워드를 붙이고, 상속할 부모 클래스명을 적는다

public class Parent { ... }; // 부모 클래스
public class Child extends Parent { ... } // 자식 클래스

 - 부모 생성자의 호출: super(...);

 자바에서는 자식 객체를 생성하면, 부모 객체를 먼저 생성한 후, 자식 객체가 그 다음에 생성된다. 객체는 생성자 호출해야만 생성되는데, 일단 생성자는 '명시적인 생성자 선언'이 없다면, 컴파일러는 알아서 기본 생성자를 생성하여 호출한다. 그러나 자식 클래스에서 명시적 생성자 선언이 있다면, 자식 클래스 안의 생성자 선언 내부 맨 첫줄에 super(); 라고 생성하게 된다. 즉, super 키워드는 부모 클래스(객체)를 나타내는 것임을 기억하면 된다.

 

 - 오버로딩(Overloading)과 오버라이딩(Overridding) 

 (1)오버로딩(Overloading)

 오버 로딩은, 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있다고 하더라도, 매개변수의 개수나 타입이 다를때, 같은 이름을 사용해서 메소드를 정의할 수 있다. 즉, 같은 기능을 하지만, 매개 변수로 사용되는 데이터 타입이 달라도, 같은 이름을 사용하여 똑같은 기능을 할 수 있게 해준다. 단, 반환되는 값만 다르게 지정할 수 없다. 

 (2) 오버로딩을 사용하는 이유

  같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다. 즉, println이라는 메소드는 인자값으로 int, double, boolean, String 등, 다양한 타입의 매개변수를 넣을 수 있지만, 콘솔창에 출력하는 기능을 수행한다. 이것은 같은 기능을 가진 메소드를 println이라는 하나의 이름으로 정의 한 것이다. 즉, 오버로딩의 대표적인 메소드라고 볼수 있다.

 

 (3) 오버라이딩(Overriding)

  부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 그대로 사용할 수 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우, 오버라이딩 할 필요가 생긴다. 오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩 하고자 하는 메소드의 이름, 매개 변수, 리턴 값이 모두 같아야한다.

 

구분			Overriding			Overloading
---------------------------------------------------------------------------------------
접근 제어자		부모 클래스의 메소드의 		모든 접근제어자 사용가능
            		접근제어자보다 더 넓은 범위	
리턴형			동일해야 한다			달라도 된다
매소드명			동일해야 한다			달라도 된다
매개변수			동일해야 한다			달라도 된다
적용 범위		상속 관계			같은 클래스 내

- 생성자란? 

 생성자는 인스턴스가 생성될때 사용되는 인스턴스 초기화 메소드다. 즉, new와 같은 키워드로 해당 클래스의 인스턴스가 새로 생성될 때, 자동으로 호출되는 메소드다. 

 

 - 형식

클래스이름 (타입 변수명, 타입 변수명, ...) {
	인스턴스 생성시 수행할 코드 블럭
    변수의 초기화 코드
}

 생성자는 몇가지 다음과 같은 조건을 가진다.

 1. 생성자의 이름은 클래스 명과 같아야한다.

 2. 생성자는 리턴 값이 없다.

1. 클래스

 - 클래스(class)란 표현하고자 하는 대상의 공통 속성을 한 군데에 정의해 놓은 것이라고 할 수 있다. 즉 클래스는 객체의 속성을 정의해 놓은 것이다. 내부의 정보를 멤버 변수라고 한다.

 

 - 인스턴스(instance)란 어떠한 클래스부터 만들어진 객체를 그 클래스의 인스턴스라고 한다. 인스턴스의 멤버변수에 접근할 때는 [생성된 인스턴스.멤버변수]의 형식을 사용한다.

 

2. 메소드(method)

 - 어떠한 작업을 수행하는 코드블럭을 하나로 묶어놓은 것.

 -  메소드가 필요한 이유

  (1) 재사용성

    - 메소드를 만들어 놓으면 반복적으로 재사용 가능하다.

  (2) 중복된 코드 제거

    - 반복되어 작성된 코드들을 없애주어 효율적인 코드가 된다.

  (3) 프로그램 구조화

   - 긴 코드를 작성할 때, 보다 쉽게 수정 및 관리할 수 있다.

 

 

  - 코딩을 하다보면 조건에 만족할 때, 계속해서 반복해야하는 상황이 있다. 그럴 경우 사용하는 문법이다. 대표적으로 for문, while문, 그리고 do~ while 문이 있다.

 

 1) for문

 for문은 다음과 같은 형식을 가진다. 초기값이 조건식에 위배되지 않을 경우 실행 코드를 한바퀴돌게 된다. 만약 조건식이 증감식을 통해 위배될 경우 반복문이 종료된다.

for(초기값; 조건식; 증감식){
	실행 코드 블럭
}

 2) for ~ each문

 위 형식의 for 반복문 이외에도 for-each문을 작성할 수 있다. 해당 구문은 배열이나 Collection등에 사용이 가능하다

for (String day : days) {
	System.out.println(day);
}

 3) while문

while문은 조건식에 위배되지 않으면, 계속해서 반복해준다.

while(조건식) {
	실행 코드 블럭
}

단, 조건식이 계속해서 반복된다면 무한 루프에 빠지게 되므로, 항상 유의해야한다.

 

4) do ~ while 문

 while문과 다르게, 일단 코드 블럭을 실행 시켜준 다음, 조건문을 비교한다. 즉, 최소 한번은 실행되게 해준다. 형식은 다음과 같다.

do {
	실행 코드 블럭
} while (조건문);

 

5) contine, break

 반복문을 제어할수 있는 반복 제어문이다. 

 - break는 반복문 전체를 탈출하라는 의미의 제어문이다.

 - continue는 해당 반복문을 탈출하고 다음 반복문을 실행하라는 의미의 제어문이다.

 

1) 조건문이란?

 특정 조건에 따라 프로그램이 실행되기를 바라면 사용할 수 있다. 대표적으로, if문, switch ~ case 문, 삼항연산자가 포함된다.

 

2) if 문

 조건식에 따라, if 문 내부의 코드를 실행 시켜준다. 코드 형식은 다음과 같다.

if (조건식) {
	실행 코드
}
else if (조건식) {
	실행 코드
}
else {
	실행 코드
}

 

3) switch ~ case 문

 다양한 타입의 조건에 따라 구분하여 동작 시켜줄 수 있는 조건문이다. 코드 형식은 다음과 같다.

 

switch (입력 변수) {
	case 1: 실행 구문
    	break;
    case 2: 실행 구문
    	break;
    case 3: 실행 구문
    	break;
    default: 기본 실행 구문
    	break;
}

4) 삼항 연산자

 조건문을 간결하게 표현하기 위해 사용하는 코드이다.

(조건식) ? A : B

 

 - 연산자란? 

 연산자는 여러 변수들간의 계산 및 비교를 위해 사용된다.

 종류로는 산술연산자, 대입연산자, 논리연산자, 관계연산자가 있다.

 

 - 연산자의 종류

종류		연산자			우선순위
--------------------------------------------------------------------------
증감 연산자	++,--			1순위
산술 연산자	+,-,*,/,%		2순위
시프트 연산자	>>, <<, >>>		3순위
비교 연산자	>,<,>=,<=,==,!=		4순위
비트 연산자	&,|,^,~			~만 1순위, 나머지는 5순위
논리 연산자	&&, ||, !		!만 1순위, 나머지는 6순위
조건 연산자	?, :			7순위
대입 연산자	=, *=, /=, %=, +=, -=	8순위

 

1) 증감 연산자

 증감 연산자는 피연산자의 값을 1씩 증가 또는 감소 시키는 연산자이다.

연산자		설명
--------------------------------------------------------------------------
X++		연산을 수행한 후, 피연산자의 값을 1 증가시킨다
++X		연산을 수행하기 전, 피연산자의 값을 1 증가시킨다
X--		연산을 수행한 후, 피연산자의 값을 1 감소시킨다
--X		연산을 수행하기 전, 피연산자의 값을 1 감소시킨다

 

2) 산술 연산자

 기본적인 4칙 연산과 나머지를 값을 구하는 연산자를 포함한다

연산자		설명
--------------------------------------------------------------------------
+		두 수의 덧셈을 반환
-		두 수의 뺄셈을 반환
*		두 수의 곱셈을 반환
/		두 수를 나눈 후 몫을 반환
%		두 수를 나눈 후 나머지를 반환

 

3) 시프트 연산자

 bit 단위의 연산처리를 하는 연산자

연산자		설명
--------------------------------------------------------------------------
>>		bit 값을 오른쪽으로 이동시킨다
<<		bit 값을 왼쪽으로 이동시킨다
>>>		bit 값을 오른쪽으로 이동한다. 이때 이동시킨 값의 빈칸은 0으로 채운다

 4) 비교 연산자

 변수나 상수의 값을 비교할때 쓰인다. 결과값은 항상 true 나 false를 반환한다.

연산자		설명
--------------------------------------------------------------------------
>		크다
<		작다
>=		크거나 같다
<=		작거나 같다
==		피연산자들의 값이 같다
!=		피연산자들의 값이 다르다

5) 논리 연산자

 논리 연산자는 피연산자의 값이 true나 false인 논리값을 가지고 다시한번 조건 연산한다.

연산자		설명
--------------------------------------------------------------------------
&		그리고(and), 주어진 값들이 모두 true 일때만 true를 반환한다.
|		또는(or), 주어진 값들 중 하나라도 true 일때, true를 반환한다.
!		부정(not), true는 false, false는 true를 반환한다.
&&		선 조건이 true일 때, 후 조건을 실행하며, 선 조건이 false이면 후조건을 실행하지 않는다.
||		선 조건이 true일 때, 후 조건을 실행하지 않으며, 선 조건이 false이면 후조건을 실행한다.

 

7) 대입 연산자

연산자		설명
--------------------------------------------------------------------------
=		연산자 중심으로 오른쪽 변수값을 왼쪽 변수에 대입한다.
+=		왼쪽 변수에 오른쪽 변수를 더하면서 대입한다.
-=		왼쪽 변수에 오른쪽 변수를 빼면서 대입한다.
*=		왼쪽 변수에 오른쪽 변수를 곱하면서 대입한다.
/=		왼쪽 변수에 오른쪽 변수를 나누어 몫의 값을 대입한다.
%=		왼쪽 변수에 오른쪽 변수를 나누어 나머지의 값을 대입한다.

8) 비트 연산자

연산자		설명
--------------------------------------------------------------------------
&		비트 단위의 AND
|		비트 단위의 OR
^		XOR(배타적 OR) (비트가 같으면 0, 다르면 1을 반환)
~		비트를 반전함

9) 조건 연산자

연산자		설명
--------------------------------------------------------------------------
? :		제어 문의 단일 비교문과 같음 조건식 ? 참값 : 거짓값

 

'Java' 카테고리의 다른 글

05.Java(기초), 반복문  (0) 2022.11.07
04.Java(기초), 조건문  (0) 2022.11.07
02. Java(기초), 변수, 자료형  (0) 2022.11.07
01. VS Code에서 Java 개발 환경 설정하기  (0) 2022.11.07
00. Java  (0) 2022.11.07

+ Recent posts