Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- til
- Python
- 컴퓨터개론
- 99클럽
- 백준
- 운영체제
- 컴퓨터구조론 5판
- 부트캠프
- AWS
- 항해
- 프로그래머스
- wil
- Spring
- 내일배움캠프
- 개발자블로그
- 국비
- 소프트웨어
- Flutter
- 개발자스터디
- 스파르타코딩클럽
- 자바
- 스파르타내일배움캠프
- 코딩테스트
- 99일지
- MySQL
- 개인공부
- 스파르타내일배움캠프WIL
- 스파르타내일배움캠프TIL
- java
- 중심사회
Archives
- Today
- Total
컴공생의 발자취
접근 제어자부터 다형성까지 본문
728x90
반응형
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과 같은 컬렉션을 반복하는 데 사용할 수 있는 객체
- Q : if vs switch 어떤 게 더 효율적인가?
- A : 대략적으로 3개 이하일 때는 if문이 더 효율적이고 그 이상은 switch가 더 효율적이라고 한다.
switch가 jump table? 식으로 동작하기에 더 효율적인 경우가 많다고 한다.
- A : 대략적으로 3개 이하일 때는 if문이 더 효율적이고 그 이상은 switch가 더 효율적이라고 한다.
- Q : 이슈 트레킹이란?
- A : 개발자, 경영자, 품질관리 테스터 등 프로젝트 참여자들이 위와 같은 업무 진행사항들을 함께 볼 수 있도록 업무를 추적 기록하는 시스템
- Q : LinkedHashSet ?
- A : HashSet은 순서를 관리하지 않아 출력할 때마다 다른 순서대로 출력. 하지만, LinkedHashSet은 삽입된 순서대로 반복되며, HashSet과 동일하게 중복 값을 허용하지 않는다.
- A : HashSet은 순서를 관리하지 않아 출력할 때마다 다른 순서대로 출력. 하지만, LinkedHashSet은 삽입된 순서대로 반복되며, HashSet과 동일하게 중복 값을 허용하지 않는다.
- Q : 그럼 상속도 공통된 상위? 추상화도 공통된 상위? 비슷한데.. 정확히 둘의 개념 차이가 뭔데?
- A : 추상 - 메서드가 공통되는데 내용이 다를 때
상속 - 메서드 이름 & 내용이 공통일 때 / is
포함 - has
- A : 추상 - 메서드가 공통되는데 내용이 다를 때
오늘의 회고
- 12시간 중 얼마나 몰입했는가?
오늘은 또 어제보다 더 집중을 못 한 것 같다.
나의 집중력이 가장 높은 시간은 오전 중인 것 같다. 밥만 먹고나면 식곤증으로 조금 헤이해진다.
그래도 이해가 안되면 그림으로 그려보는 등 나름의 노력을 했다!
- 오늘의 생각
지난 날의 궁금증 중에서 Object.equals와 String.equals가 있었는데
이 둘의 정확한 차이가 뭔지 모르겠다. 블로그를 찾아봐도 equals와 "=="의 차이에 대해서만 나올 뿐이다.
관련 공식 문서를 찾아봐야겠다.
목요일, 금요일은 알고리즘과 자료구조 특강을 진행한다고 했는데
가장 많은 관심을 가지고 있는 특강이다! 어떤 내용의 특강을 진행할지 궁금하다!!
- 내일 학습할 것은 무엇인지
3주차를 완강 후 지금 3주차 숙제를 진행 중이다.
3주차 숙제를 진행 후 4주차의 강의를 학습할 계획이다.
그리고 알고리즘 특강도 포함되어있다.
728x90
반응형
'☕ Java' 카테고리의 다른 글
[JAVA] 형변환 정리 (1) | 2024.05.03 |
---|---|
쓰레드 (1) | 2024.04.26 |
예외처리 (1) | 2024.04.25 |
배열부터 생성자 this까지 (0) | 2024.04.23 |
Java 문법 기초부터 반복문까지 (0) | 2024.04.22 |