[Facts]
- 아스키 코드를 이용해 알파벳 <-> 숫자
2. 인터페이스의 default 메서드 -> 그러면 추상 클래스랑 머가 다르지?
[Feelings+Finding]
- 아스키 코드를 이용해 알파벳 <-> 숫자
저는 장기 좌표를 뷰에서 x는 알파벳으로, y를 숫자로 사용합니다. 도메인에서 사용하기 위해서는 x를 숫자로 바꿔주어야 하는데요. 페어가 아스키 코드를 이용해서 뚝딱하고 숫자로 바꾸어주었습니다.
- 알파벳 -> 숫자
```
int x = charArray[0] - 'a';
```
charArray에는 a1, c8처럼 사용자가 입력한 좌표가 들어있습니다.
java에서 char - char는 아스키 값으로 계산해서 저 로직이 가능한 것입니다.
그래서 a는 0, b는 1 ..로 나오게 됩니다.
- 숫자 -> 알파벳
```
String xValue = Character.toString((char) (x + 'a'));
```
이 코드 역시 char + char도 아스키 값으로 계산하기 때문에 가능한 것입니다.
그래서 0은 a, 1은 b로 나오게 됩니다.
- 인터페이스의 default 메서드 -> 그러면 추상 클래스랑 뭐가 다르지
굉장히 뚱뚱했던 JanggiBoard에서 Piece로 뺄 수 있는 메서드가 있었습니다. 원래 Piece는 인터페이스 였는데, 추상 클래스로 바꾸기 싫어서 방법을 찾아보다가 알게되었습니다. default 메서드는 그냥 메서드 앞에 default라는 키워드만 붙이면 됩니다.
사실 저는 공통으로 가져야하는 메서드가 있으면 원래 추상 클래스를 사용할 생각을 했었습니다. 그래서 인터페이스의 default 메서드와 추상 클래스에서 그냥 메서드를 구현하는 것이랑 뭐가 다를까 찾아봤습니다.
제가 생각하기에 default 메서드와 추상 클래스에서 구현하는 메서드의 차이점은 인터페이스와 추상 클래스에서 나오는 것 같습니다. 인터페이스는 인스턴스 변수를 가질 수 없고, 다중 상속이 가능하다는 점과 추상 클래스는 인스턴스 변수를 가질 수 있지만, 다중 상속이 불가능하다는 점에서 차이점이 발생하는 것 같아요.
이어서, 그러면 인터페이스와 추상 클래스를 언제 사용해야할까 와닿지 않아 이에 대해 더 찾아보았습니다. 인터페이스는 인스턴스 변수를 가질 수 없기 때문에, 행동에 초점을 맞추어 ‘A는 B라는 행동을 할 수 있다’라는 의미로 사용하는 것이고, 추상 클래스는 인스턴스 변수도 자식이 물려받기 때문에 ‘A는 B이다’라는 의미로 사용하는 것이랍니다. 하지만, 저는 이 말도 와닿지 않았습니다.
그래서 더 찾아보았습니다.
인터페이스는 행동만 물려주고 ‘구현’하도록 하고, 추상 클래스는 자식이 추상 클래스의 전부를 ‘상속’받습니다. (사실 둘다 전부 물려주는 거긴하지만,,)
인터페이스는 아예 달라 보이는 객체도 같은 행동을 할 수 있습니다. 예를 들어, Bird와 Airplane가 Flyable()이라는 인터페이스를 구현할 수 있습니다. 이렇게, 인터페이스에 선언된 메서드를 각 클래스의 목적에 맞게 정의하는 것입니다.
추상 클래스는 기본적인 상태와 동작을 공유하는 객체들 사이에서 사용됩니다. 예를 들어, Eagle과 Sparrow 같은 새들은 Bird라는 추상 클래스를 상속받을 수 있습니다.
'우테코' 카테고리의 다른 글
우테코에서의 5주차 WIL (0) | 2025.03.17 |
---|---|
우테코에서의 4주차 WIL (0) | 2025.03.09 |
우테코에서의 3주차 WIL (0) | 2025.03.06 |
우테코에서의 2주차 WIL (1) | 2025.02.23 |