🤝 활동/내배캠TIL

[내일배움캠프 7일차 TIL] 배열부터 생성자 this까지

MNY 2024. 4. 23. 21:08
728x90
반응형
2024.04.23.(화)
오늘의 진도 : Java 문법 종합반 3주차 3-8 생성자 this 까지...

오늘도 내가 강의를 들으면서 새롭게 알게된 것 그 동안 애매했던 것을 오늘의 학습으로 정리하려고 한다.
오늘의 학습, 오늘의/어제의 궁금증, 오늘의 회고 이렇게 3개의 큰 틀로 나누어 정리할 것이다.
💡 오늘의 학습 키워드

- 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;
  • 깊은 복사 : 변수의 값을 복사
    1. for문으로 모든 요소의 값을 복사
    2. clone() 이용 // 2차원 이상 qoduf은 얕은 복사
    3. 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 : 사이트 참조!
 

☕ JAVA 변수의 기본형 & 참조형 타입 차이 이해하기

변수의 기본형 & 참조형 타입 변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다. 그리고 자바에서 말하는 데이터 타입(자료형)이란, 변수에

inpa.tistory.com

 

  • 아직 찾아보지 못 한 오늘의 궁금증(더보기 ..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이 포함되는 개념
 

URI와 URL, 어떤 차이점이 있나요? | 이랜서 블로그

uri와 url, 비슷한 듯 다른 it 용어, 어떤 차이점이 있는지 확인하기 | uri url 차이, uri 뜻, uri 란, uri url urn, uri vs url

www.elancer.co.kr

  • Q : final vs static
    • A : 오늘의 학습 참고! 

 


오늘의 회고

  • 12시간 중 얼마나 몰입했는가?

오늘은 어제만큼 집중하지는 못한 것 같다.

그래도 나름 이해하려고 영상을 다시 돌려보거나 궁금증이 생기면 적어놓고 찾아보는 등의 노력을 했다.

 

  • 오늘의 생각

자바가 call by value로 동작한다는 것만 아는데 왜 call by value인지는 잘 모르겠다.

참조가 있는데..  참조는 reference니까 그렇다면 call by reference로 동작하는 것 아닌가?

일단 5주차까지 강의를 모두 들었음에도 해결되지 않는 부분이 있다면 튜터님께 여쭤보러 가야겠다.

왜냐면 뒷부분의 강의를 들으면서 궁금증이 해소된 것들이 있기 때문이다.

 

  • 내일 학습할 것은 무엇인지

내일은 접근제어자부터 학습을 시작할 것이다.

그리고 아직 다 찾지 못한 오늘의 궁금증을 해결해야지!

728x90
반응형