본문 바로가기
Java

4/4 공부 기록 - 참조 타입, 클래스

by Jiwon_Loopy 2025. 4. 5.
반응형



객체 지향 프로그래밍


참조 자료형


  • 대입을 해도 참조 값이 대입 된다.
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
반응형