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
- 스파르타내일배움캠프TIL
- 프로그래머스
- java
- wil
- 부트캠프
- 컴퓨터구조론 5판
- 개발자블로그
- 스파르타내일배움캠프WIL
- 국비
- Python
- MySQL
- 내일배움캠프
- 개인공부
- 운영체제
- 개발자스터디
- 99일지
- 스파르타코딩클럽
- 코딩테스트
- 자바
- Spring
- 99클럽
- Flutter
- 중심사회
- 소프트웨어
- 스파르타내일배움캠프
- AWS
- 컴퓨터개론
Archives
- Today
- Total
컴공생의 발자취
배열부터 생성자 this까지 본문
728x90
반응형
2024.04.23.(화)
💡 오늘의 학습 키워드
- 2주차 -
얕은 복사 vs 깊은 복사
기본형 변수 vs 참조형 변수
컬렉션
ArrayList
LinkedList
Stack
Queue
Set
Map
Iterator
- 3주차 -
객체
객체지향 프로그래밍의 특징
가변길이 매개변수 선언
오버로딩
기본형 vs 참조형 매개변수
인스턴스 멤버와 클래스 멤버
final vs static
this(...)
얕은 복사 vs 깊은 복사
- 얕은 복사 : 주소값 복사
// b를 변경하면 a에도 영향이 간다.
int[] a = {1, 2, 3, 4};
int b = a;
- 깊은 복사 : 변수의 값을 복사
- for문으로 모든 요소의 값을 복사
- clone() 이용 // 2차원 이상 qoduf은 얕은 복사
- Arrays.copyOf() 이용
// import java.util.Arrays;
int[] a = {1, 2, 3, 4};
int[] b = Arrays.copyOf(a, a.length);
기본형 변수 vs 참조형 변수
- 기본형 변수
- 소문자로 시작
- 값 자체를 저장
- 참조형 변수
- 대문자로 시작
- 별도의 공간에 값 저장 후 그 주소를 저장(= 주소형 변수)
컬렉션
: 참조형 변수만 저장
- 기능 : 크기 자동조정(동적배열) / 추가 / 수정 / 삭제 / 반복 / 순회 / 필터 / 포함확인 등...
- 종류 : List(ArrayList), Queue, Set, Map
- Set(= 집합) : 순서X 중복X 배열
- Map : 순서 없는 (Key : 중복X, Value : 중복O)쌍의 집합
# String은 원래 참조형 변수
ArrayList
import java.util.ArrayList;
ArrayList<Integer> intList = new ArrayList<Integer>(); // 선언+생성
- intList..add((int index), int num); // 숫자 추가
- intList.get(int index); // 인덱스 값 읽기
- intList.set(int index, int num); // 인덱스 값을 num으로 변경
- intList.remove(int index); // 인덱스 값 삭제
- intList.clear() // 전체 삭제
LinkedList
: 남는 공간에 값 담고 그 주소값으로 목록 구성
- 조회 느림 / 추가, 삭제 빠름
import java.util.LinkedList;
LinkedList<Integer> linkedList = new LinkedList<Integer>(); // 선언+생성
Stack
import java.util.Stack;
Stack<Integer> intStack = new Stack<Integer>();
- intStack.push(int num); // 숫자 추가
- intStack.pop(); // 젤 마지막에 넣은 숫자 뺴기
- intStack.peek(); // 젤 마지막(젤 위에 있는) 숫자 읽기
- intStack.size(); // Stack의 크기
Queue
: 생성자가 없는 인터페이스
import java.util.LinkedList;
import java.util.Queue;
Queue<Integer> intQueue = new LinkedList<>();
- intQueue.isEmpty(); // 비어있는지 확인
- intQueue.poll(); // 숫자 뺴기
- intQueue.peek(); // 젤 먼저 넣은 값 조회
- intQueue.size(); // Queue의 크기
Set
: 순서X 중복X 집합 / 생성자가 없는 인터페이스
- HashSet, TreeSet 등으로 응용해서 사용 가능
import java.util.Set;
Set<Integer> intSet = new HashSet<>();
- intSet.add(int num); // 숫자 추가
- intSet.contatins(int num); // num값을 포함하는지 확인
Map
: Key(중복X), value(중복0) / 생성자가 없는 인터페이스
- HashSet, TreeSet 등으로 응용해서 사용 가능
import java.util.Map;
Map<String, Integer> intMap = new HashMap<>();
- intMap.put(key, value); // 추가
- intMap.keySet(); // Key만 배열로 빼기
- intMap.values(); // value만 배열로 뺴기
// key에서 중복된 값이 추가되면 마지막 key의 value로 덮어씌워짐 - intMap.get(key); // key를 이용해 해당 value 읽기
Iterator
Iterator iterator = strSet.iterator();
System.out.println(iterator.next());
객체
- 객체(=인스턴스) : 필드(속성) + 메서드(행위)
객체지향 프로그래밍의 특징
- 캡슐화 : 접근제어자(public, private)를 이용한 보안(외부에서 접근X), 필요하지 않은 정보를 노출시키지 않아 혼란을 줄임
- 상속 : 일관성 유지, 코드 중복 줄어듦
- 다형성 : 각각 구현되는 객체는 다양한 형태의 메서드
- 추상화 : 반복, 공통된 부분의 상위 개념
가변길이 매개변수 선언
void carSpeeds(double ...speeds) { }
carSpeeds(100, 00); // (110, 119, 87)
오버로딩
- 오버로딩: 똑같은 이름, 다른 매개변수/기능
기본형 vs 참조형 매개변수
- 기본형 매개변수 : 값 자체 복사, 원본값 변경X
- 참조형 매개변수 : 주소를 전달하기에 원본값 변경 가능
인스턴스 멤버와 클래스 멤버
- 인스턴스 멤버 : 객체 생성 후 사용
- 클래스 멤버 : 객체 생성 없이도 사용
-> static 키워드 사용
final vs static
- final(최종적) : 초기값 저장 후 수정 X
- static(공용) : 전역 변수
- 자바의 상수 : static final (변수명 전체 대문자)
this(...)
- 자신의 생성자를 호출
- 생성자를 통해 객체의 필드를 초기화할 때 중복 줄여줌
오늘의 궁금증
- Q : 깊은 복사에서 예시로 배열을 사용했는데 배열이 아닌 변수는?
- A : 변수는 얕은 복사와 같이 사용해도 깊은 복사가 된다.
- Q : C와 C++은 포인터를 이용해 주소값 복사(얕은 복사), 그럼 자바는?
- A : 자바는 포인터가 없다! 비슷한 개념으로 참조를 사용.
- Q : 포인터 vs 참조?
- A : 포인터는 메모리를 직접 핸들링할 수 있지만 참조는 메모리를 직접 핸들링할 수 없다는 차이점이 존재
- Q : 그럼 자바는 왜 포인터가 없지?
- A : 포인터를 사용하면 유연성과 성능을 향상시킬 수 있지만 안정성이 떨어지기 때문에 Java에서는 포인터라는 개념을 제공X
- Q : 기본형 vs 참조형 변수에는 어떤 게 있는데?
- A : 사이트 참조!
- 아직 찾아보지 못 한 오늘의 궁금증(더보기 ..Click!)
더보기
- Q : 참조는 reference인데 자바는 call by value로만 동작하는 것 아닌가?
- Q : wrapper클래스.. 그래서 무슨 기능들을 가지고 있는데?
- Q : Iterator은 배열하고만 같이쓰나?
- Q : if - else if - else vs switch 어떤 게 더 효율적인가?
- Q : Object.equals와 str.equals의 차이?
- Q : 트레킹이 먼데?
- Q : LinkedHashSet?
- Q : 그럼 상속도 공통된 상위? 추상화도 공통된 상위? 비슷한데.. 정확히 둘의 개념 차이가 뭔데?
어제의 궁금증
- Q : RESTful API?
- A : RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스
- Q : REST?
- A : Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처
- Q : API?
- A : 애플리케이션 프로그래밍 인터페이스(API)는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의
- Q : 도메인?
- A : 인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력할 수 있도록 문자(영문, 한글 등)로 만든 인터넷주소
- Q : URL vs URI ?
- A : URI= 식별자, URL=식별자+위치 / URI에 URL이 포함되는 개념
- Q : final vs static
- A : 오늘의 학습 참고!
오늘의 회고
- 12시간 중 얼마나 몰입했는가?
오늘은 어제만큼 집중하지는 못한 것 같다.
그래도 나름 이해하려고 영상을 다시 돌려보거나 궁금증이 생기면 적어놓고 찾아보는 등의 노력을 했다.
- 오늘의 생각
자바가 call by value로 동작한다는 것만 아는데 왜 call by value인지는 잘 모르겠다.
참조가 있는데.. 참조는 reference니까 그렇다면 call by reference로 동작하는 것 아닌가?
일단 5주차까지 강의를 모두 들었음에도 해결되지 않는 부분이 있다면 튜터님께 여쭤보러 가야겠다.
왜냐면 뒷부분의 강의를 들으면서 궁금증이 해소된 것들이 있기 때문이다.
- 내일 학습할 것은 무엇인지
내일은 접근제어자부터 학습을 시작할 것이다.
그리고 아직 다 찾지 못한 오늘의 궁금증을 해결해야지!
728x90
반응형
'☕ Java' 카테고리의 다른 글
[JAVA] 형변환 정리 (1) | 2024.05.03 |
---|---|
쓰레드 (1) | 2024.04.26 |
예외처리 (1) | 2024.04.25 |
접근 제어자부터 다형성까지 (1) | 2024.04.24 |
Java 문법 기초부터 반복문까지 (0) | 2024.04.22 |