일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 개발자스터디
- 코딩테스트
- Flutter
- 자바
- wil
- 백준
- 99일지
- 컴퓨터개론
- Spring
- 프로그래머스
- 스파르타내일배움캠프
- 99클럽
- 내일배움캠프
- 국비
- 중심사회
- til
- 운영체제
- 컴퓨터구조론 5판
- 소프트웨어
- 개발자블로그
- Python
- AWS
- 항해
- 개인공부
- 스파르타내일배움캠프WIL
- 스파르타내일배움캠프TIL
- 부트캠프
- MySQL
- 스파르타코딩클럽
- java
- Today
- Total
컴공생의 발자취
접근 제어자부터 다형성까지 본문
2024.04.24.(수)
💡 오늘의 학습 키워드
- 3주차 -
접근 제어자
제어자 사용 주의 사항
Getter & Setter
package & import
상속
클래스 간의 관계
최상위 클래스
super & this
다형성
instance of
추상 클래스
인터페이스
디폴트 메서드 & static & 다형성
접근 제어자
- public : 제한X
- protected : 같은 패키지 내, 다른 패키지의 자손
- default(기본) : 같은 패키지 내
- private : 같은 클래스 내
- 클래스 : public, default
- 메서드 & 멤버변수 : 전부 사용 가능
제어자 사용 주의 사항
- 메서드
- static, abstract 함께 사용 X
- private와 final을 같이 사용할 필요 X
- 클래스 : abstract, final 동시 사용 X
- abstract 메서드의 접근 제어자가 private일 수 없음
Getter & Setter
: 직접적인 값의 조회 방지를 위해 사용
set(또는 get) + 필드 이름(첫 글자 대문자)
- Getter : private 필드 내보내기
- Setter : 외부 값 가져와서 변경
package & import
- package : 클래스의 일부분 / 하위 패키지를 도트(.)로 구분
- import : 컴파일러에게 소스파일에 사용될 클래스의 패키지에 대한 정보 제공
상속
: 부모가 자식에게 물려주는 행위(필드, 메서드)
즉, 부모에게 물려받은 것을 재정의(= 오버라이딩)해서 사용
public class 자식클래스 extends 부모 클래스 {}
- 오히려 그림으로 표현시 자식 클래스 안에 부모 클래스가 있는 것으로 표현
- 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다
- 자바는 다중 상속을 허용하지 않는다!
클래스 간의 관계
- 상속관계 : is - a ("~은 ~(이)다")
- 포함관계 : has - a ("~은 ~을(를) 가지고 있다")
최상위 클래스(final & object)
- 부모 클래스와 메서드에서 final로 선언하면 최상위 클래스가 되어 자식 클래스에서 사용X (= 오버라이딩 불가)
- object가 자바에서 최상위 클래스
super & this
- super : 부모 클래스의 멤버 참조 키워드
- this : 자기 자신을 가리킴
다형성
- 자동타입변환 -> 부모 타입 객체 = 자식 타입 객체 : 부모 타입으로 변환
# 자식 타입의 멤버, 메서드는 사용 불가능(선언이 안되었기 때문) - 강제타입변환
# 하지만, 자식 타입의 객체로 선언 되었기 때문에 다시 자식 타입으로 돌아가서 자식 타입의 멤버, 메서드 사용할 수 있음
instance of
: 해당 클래스 객체의 원래 클래스명 확인
{대상 객체} instance of {클래스 이름}
추상 클래스
: 부모가 완성시키지 못한 클래스를 자식 클래스가 다 받아서 완성시킨다.
public abstract class 추상클래스명 {
abstract 리턴타입 메서드이름(매개변수, ...);
}
- 정의만 하고 실행내용이 없다!
- 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩
- 같은 이름으로 중복되는데 내용은 다를 때 사용
인터페이스
: 두 객체를 연결하는 다리 역할
- 상속 관계가 없는 다른 클래스들의 서로 동일한 행위
- 추상 클래스와 마찬가지로 직접 인스턴스 생성X
- 인터페이스 간의 상속 가능 extends 키워드 사용
- 다중 상속 가능
public class 클래스명 implements 인터페이스명 { // 구현
// 추상 메서드 오버라이딩
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
public interface 인터페이스명 {} // 선언
- 모든 멤버변수 : public static final // 생략 가능
- 모든 베서드 : public abstract // 생략 가능 - static, default 메서드 예외
# 생략되는 제어자는 컴파일러가 자동으로 추가
코드 + 그림 설명( 아래의 더보기 ..Click )
* 그림 설명

* 예시 코드
public class Main extends D implements C {
@Override
public void a() {
System.out.println("A");
}
@Override
public void b() {
System.out.println("B");
}
@Override
void d() {
super.d();
}
public static void main(String[] args) {
Main main = new Main();
main.a();
main.b();
main.d();
}
}
interface A {
void a();
}
interface B {
void b();
}
interface C extends A, B {
}
class D {
void d() {
System.out.println("D");
}
}
디폴트 메서드 & static & 다형성
- 디폴트 메서드 : 기본적인 구현을 제공
# 접근제어가 public(생략 가능) - static : 객체없이 호출 가능
- 다형성
- 자동 타입변환 : 인터페이스 변수 = 구현객체;
- 강제 타입변환 : 구현객체타입 변수 = (구현객체타입) 인터페이스변수;
학습방법 특강
기술적 고민을 잘하려면?
- 로직과 코드에 대한 의도 생각하기
- 구현하는 기술, 스택에 목적과 근거 가지기
- 더 좋은 방법이 있는지 고민하기
# 항상 why? 생각하기
오늘의 궁금증
- Q : 변수나 멤버를 부모 클래스에서 final로 선언한다면?
- A : 자식 클래스에서 사용 불가능. 만약 자식 클래스에서 해당 변수나 멤버를 다르게 사용하고 싶다면, 새롭게 정의해야 한다.
- 아직 찾아보지 못 한 지난날의 궁금증(더보기 ..Click!)
- Q : 참조는 reference인데 자바는 call by value로만 동작하는 것 아닌가?
- Q : wrapper클래스.. 그래서 무슨 기능들을 가지고 있는데?
- Q : Object.equals와 str.equals의 차이? // 요건 공식 문서를 찾아봐야겠어..
어제의 궁금증
- Q : Iterator은 배열하고만 같이쓰나? (= ArrayList 이외의 다른 컬렉션에서도 적용할 수 있지 않을까?)
- A : 배열이나 그와 유사한 자료구조의 내부요소를 순회하는 객체 / ArrayList, HashSet과 같은 컬렉션을 반복하는 데 사용할 수 있는 객체
[JAVA] Iterator란? Iterator를 사용하는 이유와 사용법
먼저 iterator와 원형인 iterate의 사전적 정의가 무엇인지 확인해보자. iterate : (계산, 컴퓨터 처리 절차를) 반복하다 iterator : 반복자 계산 같은 컴퓨터의 작업 처리 절차를 반복한다는 뜻 같다. 그럼
onlyfor-me-blog.tistory.com
- A : 배열이나 그와 유사한 자료구조의 내부요소를 순회하는 객체 / ArrayList, HashSet과 같은 컬렉션을 반복하는 데 사용할 수 있는 객체
- Q : if vs switch 어떤 게 더 효율적인가?
- A : 대략적으로 3개 이하일 때는 if문이 더 효율적이고 그 이상은 switch가 더 효율적이라고 한다.
switch가 jump table? 식으로 동작하기에 더 효율적인 경우가 많다고 한다.
switch와 if else 중 어떤 것을 써야하는가?
switch와 if else 중 어떤 것을 써야하는가? switch구문은 변수를 입력 받아 미리 정해놓은 여러 값들과의 일치여부를 판단하여 switch문 내의 control flow를 결정한다. if else구문은 boolean의 결과 값을 내
aahc.tistory.com
- A : 대략적으로 3개 이하일 때는 if문이 더 효율적이고 그 이상은 switch가 더 효율적이라고 한다.
- Q : 이슈 트레킹이란?
- A : 개발자, 경영자, 품질관리 테스터 등 프로젝트 참여자들이 위와 같은 업무 진행사항들을 함께 볼 수 있도록 업무를 추적 기록하는 시스템
- Q : LinkedHashSet ?
- A : HashSet은 순서를 관리하지 않아 출력할 때마다 다른 순서대로 출력. 하지만, LinkedHashSet은 삽입된 순서대로 반복되며, HashSet과 동일하게 중복 값을 허용하지 않는다.
[JAVA] LinkedHashSet의 개념과 사용법
안녕하세요 이번 포스팅에서는 LinkedHashSet의 개념과 사용법에 대해서 알아보겠습니다! 목차 LinkedHashSet이란? LinkedHashSet 선언하기 LinkedHashSet 값 추가하기 LinkedHashSet 값 삭제하기 LinkedHashSet 크기 구
crazykim2.tistory.com
- A : HashSet은 순서를 관리하지 않아 출력할 때마다 다른 순서대로 출력. 하지만, LinkedHashSet은 삽입된 순서대로 반복되며, HashSet과 동일하게 중복 값을 허용하지 않는다.
- Q : 그럼 상속도 공통된 상위? 추상화도 공통된 상위? 비슷한데.. 정확히 둘의 개념 차이가 뭔데?
- A : 추상 - 메서드가 공통되는데 내용이 다를 때
상속 - 메서드 이름 & 내용이 공통일 때 / is
포함 - has
- A : 추상 - 메서드가 공통되는데 내용이 다를 때
오늘의 회고
- 12시간 중 얼마나 몰입했는가?
오늘은 또 어제보다 더 집중을 못 한 것 같다.
나의 집중력이 가장 높은 시간은 오전 중인 것 같다. 밥만 먹고나면 식곤증으로 조금 헤이해진다.
그래도 이해가 안되면 그림으로 그려보는 등 나름의 노력을 했다!
- 오늘의 생각
지난 날의 궁금증 중에서 Object.equals와 String.equals가 있었는데
이 둘의 정확한 차이가 뭔지 모르겠다. 블로그를 찾아봐도 equals와 "=="의 차이에 대해서만 나올 뿐이다.
관련 공식 문서를 찾아봐야겠다.
목요일, 금요일은 알고리즘과 자료구조 특강을 진행한다고 했는데
가장 많은 관심을 가지고 있는 특강이다! 어떤 내용의 특강을 진행할지 궁금하다!!
- 내일 학습할 것은 무엇인지
3주차를 완강 후 지금 3주차 숙제를 진행 중이다.
3주차 숙제를 진행 후 4주차의 강의를 학습할 계획이다.
그리고 알고리즘 특강도 포함되어있다.
'☕ Java' 카테고리의 다른 글
[JAVA] 형변환 정리 (1) | 2024.05.03 |
---|---|
쓰레드 (1) | 2024.04.26 |
예외처리 (1) | 2024.04.25 |
배열부터 생성자 this까지 (0) | 2024.04.23 |
Java 문법 기초부터 반복문까지 (0) | 2024.04.22 |