[JAVA] 깊은 복사와 얕은 복사 코드로 직접 확인하기 -python과 비교
·
Language/JAVA
얕은 복사대입 연산자를 통해 복사하는 방법으로 새로운 메모리에 같은 값이 복사되는 것이 아닌, 같은 메모리를 공유하는 주소값을 복사하는 것을 얕은 복사라고 한다. 이 경우 같은 메모리를 공유하고 있기 때문에 복사한 두번째 변수 값을 변경하면 처음 변수 값도 같이 변경된다. 깊은 복사새로운 메모리를 만들어 똑같이 생성하는 것으로 보기에는 같지만, 서로 다른 메모리를 가지고 있다.실제 값을 하나씩 꺼내서 복사하거나, 메서드를 이용해 복사하는 방법이 있다.  깊은 복사와 얕은 복사는 말 그대로 얼마나 깊이있게 복사할 수 있는지를 말한다. 이 경우 설명보다 코드를 통해서 변화하는 모습과 주소값을 직접 확인하는게 제일 이해하기 좋았다.    코드로 확인 ArrayList a = new ArrayList(Array..
[자바/JAVA] 반복된 요소에 접근하는 Iterator
·
Language/JAVA
Iterator컬렉션에 저장된 요소에 접근하는 것으로 리스트 순회 시 유용하게 사용할 수 있다. 주요 메서드boolean hasNext(): 다음에 읽어올 요소가 있는지 확인하여 있으면 true, 없으면 false 반환Object next(): hasNext()로 다음 요소 유무를 확인한 뒤, 다음 요소를 가져오는 역할void remove(): next()를 통해 가져온 요소를 삭제  사용 예시Collection c = new ArrayList();Iterator i = c.iterator(); while(i.hasNext()) System.out.println(i.next());ArrayList로 컬렉션 c를 구현하였다. Iterator를 통해 c에 접근하고, 다음 요소가 없을 때까지 반복..
[자바/JAVA] ArrayList에 대해(설명, 메서드, 예시)
·
Language/JAVA
ArrayList는 자바에서 배열대신 많이 사용하는 자료구조 List 인터페이스를 구현하여 순서가 있고, 중복이 허용된다. 배열과 ArrayList의 차이점 둘 다 순서와 중복이 허용되는 점은 비슷하다. 같은 특징을 가지고 있지만 ArrayList를 사용하는 이유는 리스트 크기 문제에 있다. 배열: 배열의 크기 고정 ArrayList: 크기가 가변적 배열은 길이를 지정하면 크기를 바꿀 수 없다. 한번 선언한 배열의 길이는 고정적이다. 반면 ArrayList는 길이를 가변적으로 조절할 수 있다. 사용자가 List의 크기를 쉽게 관리할 수 있어 더 편리하게 사용할 수 있다. 배열은 길이를 바꿀 수 없는데 어떻게 ArrayList는 길이를 조절할 수 있을까? ArrayList나 Vector는 결국 배열을 이용..
[자바/JAVA] 컬렉션 프레임워크 (Collection Framework)
·
Language/JAVA
Collection: 여러 객체를 모아둔 것 Framework: 라이브러리 + 프로그래밍 방식 = 정해진 방식대로 프로그램 작성 Collection Framework: 많은 객체를 다루기 위한 표준화된 프로그래밍 방식 Collection 어떤 객체를 담을지 알 수 없어 모든 자바 객체를 최상위 객체인 Object로 저장해 관리하도록 설계되었다. 컬렉션에 자바 모든 객체를 저장할 수 있지만, 여러 형태 객체가 저장되기 때문에 실행 전에 확인할 수 없다. 객체를 한 곳에 모아 저장하고 편하게 관리하기 위해 제공되는 객체들의 집합을 의미한다. 리스트, 스택, 큐, 해시테이블 등 각 자료구조를 사용한 알고리즘을 구현한 것이다. 지정된 데이터를 읽고 추가, 삽입하는 가장 기본적인 연산이 포함되어 있다. 1. It..
[Java/자바] 스레드(Thread)와 프로세스(Process) 대한 기본 정리
·
Language/JAVA
프로그램이 실행되면 OS로부터 메모리를 할당받아 프로세스가 된다. 프로세스는 데이터 자원과 스레드로 구성되어 있는데, 자원을 이용해 실제로 작업을 수행하는 것이 스레드이다. Process - 실행 중인 프로그램 Thread - 프로그램 작업을 수행 Thread의 상태 스레드는 객체가 생성되면서 시작한다. 그리고 종료된 스레드는 다시 시작할 수 없다. 생성 상태 new - new연산자에 의해 스레드가 만들어지고 생명 주기가 시작 된다 실행 가능 상태 runnable - 객체 생성 후 start() 메서드를 호출해 실행 가능한 상태가 된다. 실행 상태 running - run() 메서드가 실행되면 실제로 스레드가 동작한다. 일시 정지 상태 blocked - I/O request나 synchronized 블록..
[Java/자바] 오류의 종류와 예외 처리
·
Language/JAVA
에러 Error: 수습 불가능한 심각한 오류. StackOverflow, OutofMemory 등 예측하여 방지 불가능 예외 Exception: 예외 처리를 통해 수습 가능한 오류. 프로그래머 부주의/ 프로그램 사용 상 실수로 발생 1. 오류의 종류 1) 구문 오류, 문법 오류 (Syntax Error, Compile Error) - 문법을 잘못 작성해 나타나는 오류로 컴파일러가 오류난 코드를 알려줘 쉽게 수정할 수 있다. Compile : 각 언어로 작성된 코드를 기계어로 변환하는 작업. 컴파일러가 소스코드(.java)를 검사하면 클래스 파일(.class)이 생성되고, 실행을 도와준다. 이를 시행하는 것이 JVM의 역할이다. https://rvrlo.tistory.com/entry/Java%EC%9E%..
[Java/자바] 자바 가상 머신 JVM이란?
·
Language/JAVA
먼저 VM(virtual machine)은 소프트웨어로 구현된 하드웨어를 뜻하는 용어이다. 1960년대 중반 처음 개발되었는데, 아직도 메인프레임의 중요한 부분으로 남아있다. 가상 머신을 사용하는 주 이유는 아래와 같다. 격리와 보안에 관한 중요도 증가. 표준 운영체제의 보안성과 신뢰성 실패. 클라우드 컴퓨팅과 같이 많은 사용자가 한 컴퓨터 공유. 이런 가상 머신은 자바 가상 머신, 운영체제 가상 머신 등 넓고, 좁은 분야까지 있다. 자바에서는 이런 가상머신을 JVM이라고 부른다. Java Virtual Machine: 자바를 실행하기 위한 가상 소프트웨어 자바는 운영체제나 하드웨어가 아닌 JVM과 통신한다. 자바는 어디서나 실행될 수 있다는 말을 들어본 적 있을 것이다. '어디서나'가 가능한 이유는 J..
[Java/자바] 입출력을 위한 스트림(Stream)
·
Language/JAVA
Stream -데이터를 전달하기 위해 사용되는 연결통로 입력과 출력을 I/O (Input/Output) 라고 부른다. 그래서 각 언어마다 입출력을 위한 라이브러리에는 io 라는 단어가 사용된다. c언어의 stdio.h 와 java의 java.io 가 예시이다. 사용자가 데이터를 입력하면 이 데이터를 전송하여 출력을 하는데, 이 사이에서 매개체로 이루어지는 것이 스트림이다. 스트림은 단방향 통신만 가능해 입력과 출력을 동시에 진행할 수 없다. 동시에 하기 위해 입력스트림과 출력스트림 2개가 필요하다. 스트림은 먼저 보낸 데이터를 우선으로 연속적으로 데이터를 주고 받는다. 선입선출(First in First Out : FIFO)의 큐(Queue)와 같은 구조로 이루어졌다. 스트림은 바이트 기반으로 이루어져있..
[Java/자바] Scanner를 이용해 입력 받기
·
Language/JAVA
자바에서는 입력을 받기 위해 Scanner 클래스를 이용할 수 있다. import java.util.*; import java.util.Scanner; util 패키지 안의 모든 클래스를 사용한다는 util.* 을 가져와도 되고, Scanner 클래스를 사용한다고 직접적으로 알려주기 위해 util.Scanner 를 가져와도 된다. Scanner 클래스의 객체를 생성하고 해당 객체를 사용하여 변수에 값을 입력받을 수 있다. Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); int age = scanner.nextInt(); //String ageInput = scanner.nextLine(); //int age = Int..