추상클래스
추상클래스( 미완성된 메서드를 가진 미완성된 클래스)를 사용하는 경우
- 클래스들의 공통된 특징을 묶고 싶을경우
- 부모 클래스의 어떤 메소드를 자식 클래스에서 반드시 구현해서 사용하게 할 때
→ 반드시 오버라이딩을 해야하는 상황에서 사용!
abstract class A{
private int a;
...
abstract int somethingMethod();
...
}
Class B extends A{
private int b;
@Override
int somethingMethod(){
....
return 0;
}
}
추상 클래스를 상속받으면 추상 클래스의 추상 메서드는 반드시! 반드시 구현해야 한다
인터페이스
빈 메소드를 정의하고, 인터페이스를 상속받는 클래스는 빈 메소드를 정의하여 사용해야 함!
interface Calculatable{
public int add(int a, int b);
public int sub(int a, int b);
public int mul(int a, int b);
public double div(int a, int b);
}
Class NormalCalculator implements Calculatable{
public int add(int a, int b) {...}
public int sub(int a, int b) {...}
public int mul(int a, int b) {...}
public double div(int a, int b) {....}
// 일반용 계산기에 필요한 다른 메소드들
}
Class EngineeringCalculator implements Calculatable{
public int add(int a, int b) {...}
public int sub(int a, int b) {...}
public int mul(int a, int b) {...}
public double div(int a, int b) {....}
// 공학용 계산기에 필요한 다른 메소드들
}
일반 계산기와 공학 계산기를 예로 들면
계산기로써 가져야 할 공통적인 기능들을 Calculatable 인터페이스에 선언해주고
각각의 클래스에서 Calculatable 인터페이스를 implements 해줘서 사용한다!
인터페이스는 멤버변수를 가질 수 없음!
추상 클래스와 인터페이스 차이점
경우에 따라서는 두 개를 바꿔 사용해도 가능하다
하지만!
추상클래스 = 구체적인 여러 클래스들을 일반화된 개념으로 묶은 것
ex.
사과, 포도, 바나나 = 과일
슬리퍼, 운동화, 구두 = 신발
인터페이스 = 여러 클래스들을 행위적 일관성으로 묶은 것
(행위적인 것이기 때문에 인터페이스명은 -able 로 짓기!)
ex.
선풍기, 헬리콥터, 바람개비 = 회전할 수 있는
비행기, 잠자리, 독수리 = 날 수 있는
오늘의 프로그래머스 문제!
최빈값 구하기
def solution(array):
cnt = [0] * len(array)
for i in array:
cnt[i] += 1 // array에 담긴 숫자별로 횟수를 cnt배열에 저장
if cnt.count(max(cnt)) > 1: // array에 가장 많은 수(최빈값)가 1개 보다 많으면 -1 반환
return -1
return cnt.index(max(cnt)) // 위의 if문에 해당하지 않으면 최빈값은 1개이므로 최빈값 반환
이렇게 풀었다!
다른분께서 풀은 것을 보니
def solution(array):
while len(array) != 0:
for i, a in enumerate(set(array)): # array를 세트형으로 만들어서 중복값 없애고 i,a 에 인덱스, 숫자 대입
# print(f'i = {i}, a = {a}, array = {array}')
array.remove(a) # 세트형이 아닌 초기 array에서 a를 삭제하면 중복값이 있으면 중복값 중 하나가 삭제되고 단일값이면 array에서 아예 없어짐
if i == 0: # 5번째줄에서 삭제되다가 값이 하나 남으면 i값은 0에서 멈추기 때문에 리턴해주면서 while문도 탈출
return a
return -1 # while문을 다 돌아도 6번째 if문에 해당하지 않는다면 즉, 최빈값이 1개가 아니라면 -1 반환
# array = [1,2,3,3,3,4,4] 일 때 출력값들
#
# i = 0, a = 1, array = [1, 2, 3, 3, 3, 4, 4]
# i = 1, a = 2, array = [2, 3, 3, 3, 4, 4]
# i = 2, a = 3, array = [3, 3, 3, 4, 4]
# i = 3, a = 4, array = [3, 3, 4, 4]
# i = 0, a = 3, array = [3, 3, 4]
# i = 1, a = 4, array = [3, 4]
# i = 0, a = 3, array = [3]
# 3
간단하지만 생각해내기가 쉽지 않을 것 같은데 똑똑한 사람들이 많은 것 같다!
'TIL' 카테고리의 다른 글
2023-10-24 TIL(프로그래머스) (0) | 2023.10.24 |
---|---|
2023-10-23 TIL(컬랙션) (0) | 2023.10.23 |
2023-10-19 TIL (git, 프로그래머스) (0) | 2023.10.19 |
2023-10-18 TIL (프로그래머스) (2) | 2023.10.19 |
2023-10-17 TIL(프로그래머스) (5) | 2023.10.17 |
댓글