본문 바로가기

내일배움캠프/Today I Learned

[내배캠 회고록] 나의 일곱번째 회고록

붕어빵과 틀

붕어빵 틀 : class(클래스) 어떤 속성과 모양을 갖는지 

붕어빵 : instance(인스턴스)는 한번 생성되고 나면 그 자체의 상태를 가지고 그 자체로 변화하게 됨.

어떠한 클래스로부터 만들어진 객체를 해당 클래스의 '인스턴스'라고 부른다. 

 

 

0. 클래스(Class), 객체(Object)

- 클래스란 객체를 정의하고 만들어 내기 위한 설계도 혹은 틀을 말한다. 

클래스 안에는 객체를 만들어내기 위해  필요한 변수와 메소드들이 존재한다. 

- 객체란 클래스에 선언된 모양 그대로 생성된 실체를 말하며 클래스의 인스턴스라고 부른다. 

 

1. 인스턴스(Instance) 개념

인스턴스란 클래스를 통해서 구현해야할 대상(객체)이 실제로 구현된 구체적인 실체를 말한다. 

 

2. 상속(Inheritance)

부모클래스와 자식클래스가 있으며, 자식 클래스는 부모의 클래스를 선택하여 

부모의 멤버를 상속받아 그대로 사용할 수 있는 것을 말한다.

But, 부모 클래스의 private 접근제한을 갖는 필드 및 메소드는 자식이 물려 받을 수 없으며,

부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드 또한

자식이 물려 받을 수 없다. 

 

3. 오버로딩/오버라이딩 (Overloading / Overriding)

오버로딩 : 새로운 메소드를 정의 하는 것, 자바에서 한 클래스 내에서 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다. 

 

* 오버로딩의 조건

1) 메소드 이름이 같아야 한다.

2) 매개변수의 개수, 타입 또는 순서가 달라야 한다. 

3) 반환 타입은 관계 없다. 

 

오버라이딩 : 상속관계에 있는 부모 클래스에서 기존 메소드를 재정의 하는 것

 

* 오버라이딩의 조건 

1) 오버라이딩이란 메소드의 동작만을 재정의 하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 한다. 

but, 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있음

2) 부모클래스의 메소드보다 접근 제어자를 좁은 범위로 변경할 수 없음

3) 부모클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없음

 

4. 접근제어자 : 외부에서의 접근을 제어하는 기능

* 접근 제어자의 범위 [private > dafult > protected -> public]

- public : 접근 제한이 전혀 없다

- protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능

- default : 같은 패키지 내에서만 접근 가능

- private : 같은 클래스 내에서만 접근 가능

 

* 제어자 조합해서 사용할 때 주의사항

- 메소드에 static과 abstract를 함께 사용할 수 없다

- 클래스에 abstract(상속을 통해서 완성되어야 한다는 의미)와 final(클래스 확장 할 수 없다는 의미)을 동시에 사용할 수 없다.

- abstract메소드는 접근 제어자가 private일 수 없다(abstract 메소드는 자손 클래스에서 구현하기 위해 접근해야 하기 때문)

- 메소드에 private와 final을 같이 사용할 필요는 없다(접근 제어자가 private인 메소드는 오버라이딩 될 수 없기 때문이다, 해당 제어자 둘 중 하나만 사용해도 된다)

 

5. 에러의 종류 

- 컴파일 에러(Compillation Error) : 문법 오류로 인해 컴파일러가 이해할 수 없는 코드가 있을 때 발생하는 오류

ex : 맞춤범, 문장부호(세미콜론,,), 선언되지 않은 변수 사용

 

- 런타임 에러(Runtime Error) : 설계 미숙이나 기계적 결함으로 인해 실행 중 수핼할 수 없는 작업을 시도할 때 발생하는 오류. 프로그램 실행 중 발생하여 프로그램이 비정상적으로 종료되게 하는 오류이다. 

ex : divide by 0, 무한루프, Null Point Error, segmentation fault/bus error : 존재하지 않는 메모리 위치에 접근 시에 나타남 

 

- 논리 에러(Logic Error) : 컴파일 및 결과가 예상과 달라 사용자가 의도한 작업을 수행하지 못하는 오류, 알고리즘이 틀린 것이므로 에러 메세지가 나오지 않아서 해결이 어려움 

 

- 링킹 에러(Linking Error) : 흩어진 소스 코드 파일들을 컴파일 한 뒤 각자 연결할 때 발생하는 에러로 

ex : 선언된 헤더 파일이나 다른 코드 파일이 실제로 존재하지 않을 때(위치나 이름이 잘못됐을 때) 발생한다. 

 

- 파스에러(Parse Error) : 인터프리터 언어에서 문법의 오류로 인해 나타나는 에러이다.

 

6. 추상클래스 & 인터페이스 

추상화란? 공통된 행동, 필드를 묶어 하나의 클래스를 만드는 것을 의미한다. 

 

추상클래스란, 하나 이상의 추상 메소드를 포함한 클래스를 추상 클래스(abstract class)라고 한다. 

단 하나 이상의 추상 메소드만 포함하면 생성자, 일반 메소드도 포함 가능하다. 

추상 클래스와 인터페이스의 다른 점은 인터페이스는 추상메소드만 포함하나, 

추상클래스는 하나의 추상 메소드만 포함하면 추상클래스가 된다. 

이때, 추상 메소드란, 함수선언만 되어있고 구현부가 없는 메소드를 추상 메소드라고 한다. 

 

ex : public abstract class 클래스명();

 

추상 클래스의 경우 부모-자식간의 상속이 가능하며, 추상 클래스의 상속관계에서는 '구현의 의무'가 있기 때문에

부모클래스를 상속 받은 자식 클래스는 반드시부모의 추상 함수를 구현해야 한다는 점이 있다.

 

7. HashSet, HashMap(containsKey() -> 해당 키값이 있는지 확인 가능)

HashSet은 Set 인터페이스의 구현 클래스이다. 

- Set의 경우에는 비선형 구조이기 때문에 순서가 없으며, 인덱스 또한 존재하지 않는다. 따라서 값을 추가하거나 삭제할 경우 해당 값이 있는지 먼저 검색 한 뒤 추가 또는 삭제를 해야한다. 

- HashSet 갑 추가를 위해서 HashSet 객체 생성 후 .add() 를 통해서 값을 추가하면 된다(삭제 = .remove())

 

HashMap은 Map 인터페이스를 상속하고 있기 때문에 Map의 성질을 그대로 가지고 있습니다.

- Map은 key와 value로 구성된 entry객체를 저장하는 구조를 가지고 있는 자료구조 이다. 

- key와 value는 모두 객체이며, 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없다. 만약 기존 저장된 키와 동일한 키 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체하게 된다. 

- Hashing을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 가지고 있다. 

- HashMap에 값을 추가하기 위해서 .put()메소드를 사용하며 삭제의 경우 remover(), 모든 값 제거에는 clear()가 사용된다.