부모가 될 수 없는 클래스
- 상속을 금지 시키려면 클래스를 정의할 때 final 키워드를 사용한다.
- public fianl class 클래스명 {}
String 클래스는 왜 final 일까?
- 다음 예제를 보며 알아보자
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
다음과 같은 코드에서 str1,2,3,4를 출력한다면?
답 :
hello
hello
hello
hello
가 나오게 됨
만약
if(str1 == str2){
}
if(str1 == str3){
}
if(str3 == str4){
}
이경우에는 첫번째 if문만 참이된다.
이유는 참조변수와 메모리에 어떻게 저장이 되는지를 생각해보면 된다.
따라서 조건문으로 값만 확인 하고 싶다면 equals 메서드를 사용하면 된다.
String과 비슷하지만 내부가 변하는 StringBuffer 클래스가 있다.
| 접근제한자 | 클래스내부 | 동일패키지 | 하위클래스 | 그외 |
| public | O | O | O | O |
| protected | O | O | O | X |
| default | O | O | X | X |
| private | O | X | X | X |
인터페이스
- 어떤 기능을 만들어야 할까?
- 만들어야 할 기능들을 관련된 것끼리 묶은 후 이름을 지어준다.
- 기능적 요구사항과 비기능적 요구사항
인터페이스 작성 문법
[public] interface 인터페이스 이름 {}
- 인터페이스 이름은 Upper CamelCase로 작성된다.
- interface도 확장자가 .java 파일로 작성한다.
- 인터페이스의 모든 필드는 public static final 이어야 하며, 모든 메서드는 public abstract이어야 한다. (java 7 까지는)
- final, abstract를 생략하면 자동으로 붙는다.
- java8 부터는 디폴트(default) 메서드와 정적(static) 메서드도 선언이 가능합니다.
인터페이스를 구현하게 되면 반드시 인터페이스가 가지고 있는 메서드를 오버라이딩할 필요가 있다.
'개발 · IT > 백엔드' 카테고리의 다른 글
| Java 스프링부트를 이용한 채팅 프로그램 구축하기: 웹소켓 활용, 설정 및 테스트 방법 (1) (0) | 2023.02.20 |
|---|---|
| 자바 객체지향 문법 - 팩토리 메서드 패턴, 자바 리플렉션 (0) | 2023.02.16 |
| 자바 객체지향 문법 - 생성자, 추상 (0) | 2023.02.16 |
| 객체지향 문법 - 필드 선언 (0) | 2023.02.16 |
| Java 객체지향 프로그래밍 기초: 클래스, 메서드, 객체와 객체 사이의 커뮤니케이션 이해하기 (0) | 2023.02.14 |
댓글