티스토리 뷰
728x90
반응형
1. 참조 타입 vs. 기본 타입
- 기본 타입 (Primitive Type): 실제 값을 저장하는 변수로, 메모리 상에 해당 값이 직접 저장된다.
- 예시: int a = 5; 여기서 a는 메모리 공간에 5라는 값을 직접 저장.
- 기본 타입 종류:
- 정수형: byte, short, int, long
- 실수형: float, double
- 문자형: char
- 논리형: boolean
- 참조 타입 (Reference Type): 객체의 메모리 주소(참조)를 저장하는 변수로, 실제 데이터는 힙 메모리에 저장되고, 변수는 그 데이터의 주소를 가리킨다.
- 예시: String s = "Hello"; 여기서 s는 "Hello" 문자열의 메모리 주소를 저장한다.
- 참조 타입 종류:
- 배열: int[], String[]
- 클래스: String, Scanner
- 인터페이스: List, Map
- 열거 타입: enum Day { MONDAY, TUESDAY }
2. 배열 (Array)
- 배열 선언과 초기화:
int[] numbers = new int[5]; // 길이가 5인 정수형 배열 선언
numbers[0] = 10; // 첫 번째 요소에 값 할당
- 2차원 배열 예시:
String[][] arr = {
{"1번째 배열의 1번째 데이터", "1번째 배열의 2번째 데이터", "1번째 배열의 3번째 데이터"},
{"2번째 배열의 1번째 데이터", "2번째 배열의 2번째 데이터", "2번째 배열의 3번째 데이터"}
};
System.out.println(arr[0][0]); // 1번째 배열의 1번째 데이터 출력
- 배열 예시:
public static void referenceSample2() {
String[][] arr = new String[2][3];
arr[0][0] = "1번째 배열의 1번째 데이터";
arr[0][1] = "1번째 배열의 2번째 데이터";
arr[0][2] = "1번째 배열의 3번째 데이터";
arr[1][0] = "2번째 배열의 1번째 데이터";
arr[1][1] = "2번째 배열의 2번째 데이터";
arr[1][2] = "2번째 배열의 3번째 데이터";
System.out.println(arr[0][0]);
System.out.println(arr[0][1]);
System.out.println(arr[0][2]);
System.out.println(arr[1][0]);
System.out.println(arr[1][1]);
System.out.println(arr[1][2]);
// 이렇게 길이를 정하지 않고 설정할수 있지만 길이를 설정하고 설정하지 않는것은 권장하지 않는다
// 이렇게 무한정으로 늘어나는 코드를 설정하면 좋지 않다
String[][] arr2 = {
{ "1번째 배열의 1번째 데이터", "1번째 배열의 2번째 데이터", "1번째 배열의 3번째 데이터" },
{ "2번째 배열의 1번째 데이터", "2번째 배열의 2번째 데이터", "2번째 배열의 3번째 데이터" }
};
System.out.println(arr2[0][0]);
System.out.println(arr2[0][1]);
System.out.println(arr2[0][2]);
System.out.println(arr2[1][0]);
System.out.println(arr2[1][1]);
System.out.println(arr2[1][2]);
}
3. null과 NullPointerException
- null: 참조 타입 변수에 아무런 객체도 연결되어 있지 않음을 의미한다. 만약 null을 참조하려고 하면 NullPointerException이 발생할 수 있다.
4. 예외 처리 (Exception Handling)
- 예외 (Exception): 프로그램 실행 중 발생하는 오류로, 처리하지 않으면 프로그램이 비정상 종료.
- int[] intArray = null; intArray[0] = 1; 코드를 실행하면, intArray가 null이므로 NullPointerException이 발생한다.
5. 얕은 복사와 깊은 복사
- 얕은 복사 (Shallow Copy):
- 설명: 원본 배열과 복사된 배열이 같은 메모리 주소를 공유한다. 따라서, 복사된 배열에서 데이터를 수정하면 원본 배열도 영향을 받는다.
예시:
int[] original = {1, 2, 3};
int[] shallowCopy = original; // 얕은 복사
shallowCopy[0] = 10;
System.out.println(original[0]); // 10 출력, 원본 배열도 변경됨
- 깊은 복사 (Deep Copy):
- 설명: 원본 배열의 각 요소를 새로운 메모리 공간에 복사하여, 복사된 배열과 원본 배열이 독립적인 메모리 공간을 가진다. 따라서, 복사된 배열에서 데이터를 수정해도 원본 배열은 영향을 받지 않는다.
예시:
int[] original = {1, 2, 3};
int[] shallowCopy = original; // 얕은 복사
shallowCopy[0] = 10;
System.out.println(original[0]); // 10 출력, 원본 배열도 변경됨
6. 메모리 사용 영역
- 스택 영역 (Stack): 메서드 호출 시 지역 변수와 매개변수가 저장되는 공간. 메서드 실행이 끝나면 자동으로 사라진다.
- 힙 영역 (Heap): 객체와 배열이 저장되는 공간. 참조 타입 변수가 이 영역에 있는 객체를 가리킨다. 가비지 컬렉션(Garbage Collection)을 통해 더 이상 사용되지 않는 객체가 자동으로 제거.
- 메서드 영역 (Method Area): 클래스의 코드, 메서드, 정적 변수 등이 저장되는 영역.
7. 열거타입(enum)
- 개념: 자바에서 제한된 상수들의 집합을 정의하는 데이터 타입. 주로 특정 값들로 제한된 데이터를 표현할 때 사용.
- 열거 타입 주 사용방법
- 상수 집합 정의: 열거 타입을 통해 한정된 값의 집합을 정의.
- Switch 문에서 사용: 열거 타입은 switch 문에서 조건문으로 자주 사용.
- 메서드와 필드 추가: 열거 타입에 메서드와 필드를 추가하여 더 복잡한 동작을 정의할 수 있다.
- 사용 예시
1. 간단한 열거 타입 예시
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class EnumExample {
public static void main(String[] args) {
Day today = Day.MONDAY;
switch (today) {
case MONDAY:
System.out.println("오늘은 월요일입니다.");
break;
case TUESDAY:
System.out.println("오늘은 화요일입니다.");
break;
// 다른 요일에 대한 케이스 추가 가능
default:
System.out.println("오늘은 주말입니다.");
break;
}
}
}
2. 메서드와 필드를 가진 열거 타입
enum Season {
SPRING("봄", "따뜻하다"),
SUMMER("여름", "덥다"),
FALL("가을", "시원하다"),
WINTER("겨울", "춥다");
private final String koreanName;
private final String description;
Season(String koreanName, String description) {
this.koreanName = koreanName;
this.description = description;
}
public String getKoreanName() {
return koreanName;
}
public String getDescription() {
return description;
}
}
public class EnumExample2 {
public static void main(String[] args) {
for (Season season : Season.values()) {
System.out.println(season.getKoreanName() + "은 " + season.getDescription());
}
}
}
열거 타입 사용 시 장점
- 타입 안정성: 열거 타입을 사용하면 허용된 상수 값들만 사용할 수 있어, 실수를 줄일 수 있다. 예를 들어, 요일을 표현할 때 문자열로 "MONDAY"를 사용한다면 오타로 인해 오류가 발생할 수 있지만, 열거 타입을 사용하면 이러한 오류를 방지할 수 있다.
- 가독성 향상: 열거 타입을 사용하면 코드의 의미를 명확하게 표현할 수 있다. 예를 들어, Day.MONDAY와 같이 열거형 상수를 사용하면 코드가 더 직관적으로 이해된다.
- 상수 그룹화: 관련된 상수들을 하나의 열거 타입으로 그룹화함으로써 코드의 구조를 더 명확하게 만들 수 있다.
- 추가 기능: 열거 타입은 클래스처럼 메서드와 필드를 가질 수 있어, 복잡한 동작을 정의하거나 관련 데이터를 함께 저장할 수 있다.
열거 타입 사용 시 단점
- 유연성 부족: 열거 타입은 컴파일 시점에 값이 결정되기 때문에, 런타임에 동적으로 값의 집합을 변경하거나 추가하는 것이 불가능. 따라서 고정된 값의 집합이 아닌 경우에는 사용하기 어렵다.
- 오버헤드: 열거 타입은 클래스와 유사하게 동작하므로, 메모리와 성능 면에서 약간의 오버헤드가 발생할 수 있다. 그러나 이 단점은 일반적인 사용에서는 크게 문제가 되지 않으며, 성능이 극히 중요한 상황에서만 고려될 필요가 있다.
- 버전 관리 어려움: 열거 타입에 정의된 상수 값이 변경되면, 이를 사용하는 모든 코드가 영향을 받습니다. 따라서 열거 타입을 자주 변경해야 하는 경우에는 코드 유지보수에 어려움이 있을 수 있다.
8. 문자열 비교와 관련 메서드
- 문자열 비교: 문자열을 비교할 때 == 연산자가 아닌 equals() 메서드를 사용해야 정확한 비교가 가능.
예시:
String str1 = "Hello";
String str2 = new String("Hello");
System.out.println(str1 == str2); // false 출력 (주소 비교)
System.out.println(str1.equals(str2)); // true 출력 (값 비교)
문자열 관련 메서드:
1.특정 위치 문자 추출 (charAt()):
- 설명: 문자열에서 특정 위치의 문자를 추출.
예시:
String str = "Hello";
char ch = str.charAt(1); // 'e' 추출
2. 문자열 길이 (length()):
- 설명: 문자열의 길이를 반환.
예시:
String str = "Hello";
int len = str.length(); // 5 반환
3. 문자열 대체 (replace()):
- 설명: 문자열 내 특정 문자열을 다른 문자열로 대체.
예시:
String str = "Hello World";
String newStr = str.replace("World", "Java"); // "Hello Java" 반환
4. 문자열 잘라내기 (substring()):
- 설명: 문자열의 특정 부분을 잘라서 반환.
예시:
String str = "Hello World";
String subStr = str.substring(0, 5); // "Hello" 반환
728x90
반응형
'개발자교육' 카테고리의 다른 글
24_07_26 오늘의 수업내용 (0) | 2024.08.04 |
---|---|
24_08_01 오늘의 수업내용 (0) | 2024.08.01 |
24_07_25 오늘의 수업내용 (0) | 2024.07.25 |
24_07_19 오늘의 수업내용 (0) | 2024.07.23 |
24_07_17 오늘의 수업내용 (0) | 2024.07.22 |
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- cte ( common table expression )
- jsp의 주요 태그
- 필드 초기화와 사용
- 조건문
- get한글인코딩
- 데이터변환함수
- let-const-var
- 배열(Array)
- javascript자료형
- 클래스의 구성 멤버
- 호이스팅(hoisting)
- 오버로딩vs오버라이딩
- Java
- 뷰(view)
- resultsetimpl
- 테이터베이스 설계
- ㅎgroupbyvs윈도우함수
- 함수범위vs블록범위
- 객체 지향 프로그래맹의 특징(캡슐화|상속|다형성)
- JavaScript
- 제어흐름함수
- 변수표기법
- jdbc
- http 프로토콜:get vs post
- 가변 길이 매개변수와 리턴
- 참조타입vs기본타입
- 반복문
- stored program
- 문자열비교메서드
- 데이터베이스(mysql)
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함