본문 바로가기

전체 글

깊은 복사(Deep Copy) , 얕은 복사 (Shallow Copy) 배열의 깊은 복사(Deep Copy) , 얕은 복사 (Shallow Copy) 자바에서는 객체를 복사할 때, 2가지 방법을 사용한다. 깊은 복사(Deep Copy)와 얕은 복사 (Shallow Copy)가 있는데 객체가 참조하는 다른 객체들을 어떻게 다루는지에 따라서 달라진다. 1. 깊은 복사(Deep Copy) : 깊은 복사는 원본과 복사본 둘 중 한가지의 값을 변경해도 다른 하나에 영행을 주지 않는다. 따라서 복사 대상 객체의 내부에 있는 객체들까지 모두 복사하면서 새로운 객체를 생성하므로 복사된 객체와 원본 객체는 완전한 독립적인 객체라고 생각하면 된다. 예] import java.util.Objects; class Person { String name; Address address; // 참조 타.. 더보기
배열(Array) [출처: pixabay] 배열이란? 배열은, 유형의 데이터를 순차적으로 저장하는 자료 구조이다. 배열을 선언하고, 생성 및 초기화할 수 있다. 생성할 때 크기를 저장하는데 그 크기를 변경할 수 없고, 고정되어 있는 특징 때문에 미리 메모리를 할당하고 사용할 수 있는 특징이 있다. 그리고 고정된 크기를 가지고 [인덱스]를 통해 접근할 수가 있다. - 배열 선언 : int[] numbers; // 정수형 배열을 선언 String[] names; // 문자열 배열을 선언 double[] scores; // 실수형 배열을 선언 - 배열 생성 : numbers = new int[5]; // 크기가 5인 정수형 배열을 생성 names = new String[3]; // 크기가 3인 문자열 배열을 생성 scores .. 더보기
패키지(Package), 임포트(import) 1. 패키지(Package) 패키지(=폴더)는 보통 컴퓨터에서 사용하고 있는 폴더의 개념과 유사하다. 코드의 구조화와 관리를 위해 사용되는 방법이다. 관련된 클래스(=파일)들을 그룹화해서 구분하고, 이름 충돌을 방지하고 코드의 유지보수성을 높이는데 도움이 된다. ㅁ 패키지 만들 때 규칙 (3가지) 패키지 이름 규칙: 패키지 이름은 소문자로 작성한다. 패키지 이름은 보통 도메인 이름을 역순으로 나열하여 사용한다. 예를 들어, com.example.myproject와 같이 사용한다. 패키지 이름은 유니크해야 하며, 중복되지 않도록 선택해야 한다. 패키지 이름에는 공백이나 특수 문자를 포함할 수 없다. 오직 영어 알파벳, 숫자, 밑줄(_), 점(.)만 포함될 수 있다. 디렉터리 구조 규칙: 패키지 이름에 따라.. 더보기
메소드(Method) 1. 메소드(Method) 자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가진다. 메소드는 특정 작업을 수행하는 코드 블록으로 전체의 문장을 하나로 묶어서 실행할 수 있게 하는 명령문의 집합이다. 보통 프래그래밍 언어는 위에서 아래로 읽히는데, 메서드를 중간에 삽입하면 호출이 가능하다. (메소드를 호출한 곳으로 돌아옴) 호출 시, 어떠한 값을 미리 주고(전달인자: Arguments) → 그 값을 받는 변수(매개변수: Parameters)로 활용해서 메소드 수행이 가능하다. 메소드를 사용하는 목적은 코드를 재사용할 수 있고, 모듈화(코드를 논리적인 단위로 나눌 수 있다) 할 수 있다는 점에서 코드의 가독성을 향상하고, 유지보수에 용이하다... 더보기
연산자(Operator) 종류와 연산자의 우선순위 1. 연산자 자바에서는 다양한 연산자가 사용이 되는데 우선순위에 따라 계산이 된다. 우선순위가 높은 것부터 낮은 것 순으로 나열이 된다. 연산자 우선순위는 하기와 같다. > 괄호 () (가장 높은 우선순위) 증감 연산자 ++, -- 산술 연산자 +, -, *, /, % 비교/ 관계 연산자 , =, instanceof 비교/ 등호 연산자 ==,!= 논리 AND & 논리() XOR ^ 논리 OR | 논리 AND && 논리 OR || 조건?: 대입 =, +=, -=, *=, /=, %=, &=, |=, ^=, =, >>>= (가장 낮은 우선순위) 이 우선순위를 고려하여 연산이 수행된다. 예를 들어, 곱셈과 나눗셈은 덧셈이나 뺄셈보다 먼저 계산되고, 논리 연산자는 대입 연산자보다 먼저 계산이 된다. 연산자 우선.. 더보기
오버플로우 (Overflow), 언더플로우(Underflow) / 형변환(Typecasting) 1. 오버플로우 (Overflow) 허용된 범위 이상의 수의 값을 저장할 때 발생한다. 이 경우, 강제형변환을 시켜야 하는데 큰 값에서 작은 값의 자료형으로 옮겨져 가야 하기 때문에 데이터 손실 발생이 있다. 그렇기 때문에 식에서 반드시 변하는 값을 앞에 명시해 주어야 한다. 예) public class Main { public static void main(String[] args) { // 더 큰 데이터 타입을 더 작은 데이터 타입으로 변환 (강제 형변환 필요) double bigValue = 123.45; int intValue = (int) bigValue; System.out.println("intValue: " + intValue); // 출력 결과: 123 // 정수를 실수로 변환 (강제 형.. 더보기
변수(Variable), 상수(Constant) 1. 리터럴 (Literal) 프로그래밍 언어에서 미리 정해놓은 값의 형태를 말한다. 변하지 않는 데이터(고정된 값) 그 자체를 의미한다. 리터럴 값으로 산술 연산 할 수 있다. ㅁ 리터럴의 종류 : 숫자 (정수, 실수), 문자 (한 글자), 문자열 (두 글자 이상), 논리(참/거짓) 2. 변수 (Variable) 데이터(data)를 저장할 수 있는 메모리 공간을 의미한다. 그리고 저장된 값을 변경될 수 있다. 변수를 사용하는 이유는, i) 값의 의미를 부여해서 코드 의미를 파악하는데 용이하다. ii) 재사용할 수 있어 프로그램에서 가독성을 높여주고 유지보수성에 좋다. ㅁ 자료형(Type) 자바 데이터의 기본적인 타입은 참조 자료형 1가지를 제외한 나머지는 총 8가지가 있다. ▶ 기본저장형 - 논리 타입.. 더보기