반응형

객체 지향 프로그래밍
참조 자료형
- 대입을 해도 참조 값이 대입 된다.
public static void main(String[] args) {
//기본 자료형
int a = 10;
int b = a;
a = 11;
System.out.println(b);
출력 : 10 // a의 값이 올바르게 바뀐 것으 ㄹ알 수 있다.
//참조 자료형
int[] a1 = {1,2,3};
int[] b1 = a1;
System.out.println(Arrays.toString(b1));
a1[0] = 4;
System.out.println(Arrays.toString(b1));
출력
[1, 2, 3]
[4, 2, 3] // b1의 배열도 바뀌었다.
}
- 객체 비교는 == 연산자 사용 (주소 값)
객체 지향 언어
- 캡슐화
- 객체의 데이터(필드)와, 동작(메소드)를 하나로 묶고 실제 구현 내용을 외부에 감춤
- 외부는 내부를 알지 못함
- 접근 제한자를 사용
- 다형성
- 사용 방법은 동일하지만, 실행 결과가 다양하게 나오는 성질
- 프로그램을 구성하는 객체를 바꾸면 실행 성능이 다르게 나올 수 있음
- 상속, 인터페이스 구현을 통해 얻어짐
- 부모가 더 넓은 범위여야 함 (자식 → 부모 캐스팅)
- 상속
- 부모가 가진 특성을 자식이 가지고 태어남
- 코드의 재사용성을 높여줌
- 유지 보수 시간을 최소화 시켜줌
- 구현
- 인터페이스
클래스
- public 클래스는 1개만 만들 수 있다.
- 생성자를 만들 땐 new 클래스()
- 생성자 ≠ 클래스
package ch06.sec04;
public class Student {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
System.out.println(s1 == s2); // false
Student s3 = s2; // 같은 주소
System.out.println(s2 == s3); // true
}
}
출력 결과
false
true
상속
인터페이스
익명 객체
라이브러리
예외 처리
문자열
- 새로운 문자열을 리턴 한다. (기존 문자열이 바뀐 것이 아니다.)
- test = “안녕하세요” 예제
- 문자열 길이
- .length()를 이용
// 문자열 길이 for(int i = 0; i< test.length(); i ++) { System.out.println(test.charAt(i)); } 출력 결과 5 - 문자열 대체
- .replce(대상 문자, 바꿀 문자)
// 문자열 대체 test.replace("세", "시"); System.out.println(test); // 변하지 않음, 문자열은 immutable (불변) //새로운 문자열로 리턴 System.out.println(test.replace("세", "시")); // 변하지 않음, 문자열은 immutable (불변) 출력 결과 안녕하세요 안녕하시요 - 공백 제거
- replace(” “,””)
// 공백 제거 String test2 = " 안 녕 하 세 요"; System.out.println(test2.replace(" ", "")); 출력 결과 안녕하세요 - substring(인덱스)
- 첫 번째부터 해당 인덱스 - 1 까지 잘라낸 나머지
// 문자열 잘라내기 System.out.println(test.substring(2)); 출력 결과 하세요- .substring(시작 인덱스, 목표 인덱스 - 1)
// 문자열 잘라내기 System.out.println(test.substring(0,2)); 출력 결과 안녕 - split
- 해당 구분자를 통해 배열에 나누어 할당
// split String board = "번호,내용,제목,성명"; String[] arr = board.split(","); System.out.println(Arrays.toString(arr)); 출력 결과 [번호, 내용, 제목, 성명]
배열
- 같은 타입만 넣을 수 있다.
- 객체도 넣을 수 있다.
- 다 차원 배열
- 차원 수 만큼 [ ]을 붙여준다.
- 배열 안 배열 (열 , 행)
- 배열의 복사
- 얕은 복사
- 주소 값만 복사
- 대입
- 깊은 복사
- 내부 배열의 값 까지 복사
- 직접 복사
- .clone( ) 함수 이용
- 얕은 복사
- 더 큰 값으로 복사하려면 new로 할당 후 복사 (깊은 복사)
- System.arraycopy( )를 이용한 복사
// System.arrayCopy(복사할 배열, 복사할 위치, 복사될 배열, 복사될 위치, 복사할 길이)
String[] oldArray = {"java", "array", "copy"};
String[] newStrArray = new String[5];
System.arraycopy(oldArray, 0, newStrArray, 0, oldArray.length );
출력 결과
[java, array, copy, null, null]
- Arrays.copyOf(복사할 배열, 복사할 개수)
String[] array = Arrays.copyOf(oldArray, 5);
출력 결과
[java, array, copy, null, null]
열거형
- 상수로 표현
public enum Week{
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
Week w = Week.FRIDAY;
정렬
- 오름차순
package ch04;
import java.util.Arrays;
public class ch04 {
public static void main(String[] args) {
// 정렬
int[] arr = {3,7,5,8,10};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [3, 5, 7, 8, 10]
// 최솟값
System.out.println(arr[0]); // 3
// 최댓값
System.out.println(arr[arr.length-1]); // 10
}
}
**출력 결과**
[3, 5, 7, 8, 10]
3
10
- 내림차순의 경우 reverseOrder()를 사용할 수 있으나, 기본 자료형 (ex) int)은 사용할 수 없고, 참조 자료형 (ex) Integer)만 사용 가능
String []name = {"홍길동","김길동","최길동"};
Arrays.sort(name);
System.out.println(Arrays.toString(name)); // [김길동, 최길동, 홍길동]
Arrays.sort(name , Collections.reverseOrder());
System.out.println(Arrays.toString(name)); // [홍길동, 최길동, 김길동]
**출력 결과**
[김길동, 최길동, 홍길동]
[홍길동, 최길동, 김길동]
- Stream을 이용하여 참조 자료형으로 변경 후 내림차순 처리 가능
// stream으로 내림차순 정렬
Integer[] arr2 = Arrays.stream(arr).boxed().toArray(Integer[]::new);
Arrays.sort(arr2, Collections.reverseOrder());
System.out.println(Arrays.toString(arr2));
**출력 결과**
[10, 8, 7, 5, 3]
메모
- 참조 자료형은 null로 자동 초기화
- 기본 자료형은 null이 들어갈 수 없음
- main 함수의 args[]
- 실행 시 메서드의 매개변수를 전달해주는 매개 역할
- eclipse
public class MainStringArrayArgument { public static void main(String[] args) { if(args.length != 2) { System.out.println("프로그램 입력 값 부족"); System.exit(0); } String strNum1 = args[0]; String strNum2 = args[1]; int num1 = Integer.parseInt(strNum1); int num2 = Integer.parseInt(strNum2); int result = num1 + num2; System.out.println(num1 + " + " + num2 + " = " + result); } } Run -> Run Configurations -> Argument 탭 클릭 -> Program Argument 입력란에 10 20 입력- 콘솔
c:\\>d: D:\\>cd java D:\\java>dir D 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: 348C-C162 D:\\java 디렉터리 2025-04-01 오후 04:38 <DIR> . 2025-04-01 오후 04:38 <DIR> .. 2025-04-01 오후 04:36 <DIR> eclipse 2025-04-01 오후 04:37 <DIR> jdk-11 2025-04-01 오후 04:37 <DIR> jdk-17 2024-11-26 오후 01:48 <DIR> sts-3.9.18.RELEASE 2025-04-02 오후 12:15 <DIR> workspace 0개 파일 0 바이트 7개 디렉터리 99,982,090,240 바이트 남음 D:\\java>cd workspace D:\\java\\workspace>cd thisisjava D:\\java\\workspace\\thisisjava>cd bin D:\\java\\workspace\\thisisjava\\bin>java -cp . ch04.MainStringArrayArgument 10 20 10 + 20 = 30
- 실행 시 메서드의 매개변수를 전달해주는 매개 역할
- 상수(불변 값)는 대문자로 써주어야 한다.
- 상수는 대입할 수 없다.
- 날짜를 나타내는 Calendar 객체는 new로 생성하지 않음
- 월은 0부터 시작하므로, 1을 더해주어야 함
- bin → class 파일 (실행용)
- src → java 파일 (코딩용)
728x90
반응형
'Java' 카테고리의 다른 글
| 이것이 자바다 - 챕터4 연습 문제 (0) | 2025.04.05 |
|---|---|
| 이것이 자바다 - 챕터3 연습 문제 (0) | 2025.04.05 |
| 4/3 - 변수, 조건문, 반복문 (0) | 2025.04.05 |
| 4/2 변수와 타입, 연산자 (0) | 2025.04.05 |
| 4/1 - 공부 기록, Java 시작하기 (0) | 2025.04.05 |