자바

자바 정리 2

alsdnr6672 2024. 7. 10. 18:30

[배열]
* 1차원 배열 : "같은 자료형"의 "여러 개의 데이터"을 저장하는 공간
              배열의 데이터는 "인덱스"로 관리가 된다.
              ** 인덱스의 시작번호: 0 **

* 선언 표현식
  자료형[] 변수명;

* 할당 표현식
자료형[] 변수명 = new 자료형[배열길이];

* 배열 선언과 동시에 할당

   (1) 자료형[] 참조변수명 = new 자료형[] {값1, 값2, 값3};
      자료형[] 참조변수명;
      참조변수명 = new 자료형[]{값1, 값2, 값3};

   (2) 자료형[] 참조변수명 = {값1, 값2, 값3}; (O)
      자료형[] 참조변수명;
      참조변수명 = {값1, 값2, 값3}; (X)

   (3) 자료형[] 참조변수명 = new 자료형[데이터길이];
      참조변수명[0] = 값1;
      참조변수명[1] = 값2;
      참조변수명[n] = 값n;


* 배열 복사
   (1) 얕은 복사 : 주소 값만 복사하여 실제 데이터는 한 곳에서 관리.
                  데이터가 변경되면 복사된 배열에도 영향을 줌(반영이 됨)
                  ex) int[] arr1 = new int[] {1, 2, 3};
                      int[] arr2 = arr1;
    (2) 깊은 복사 : 새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사.

(1) 반복문 사용
                  ex)   아래 origin 배열을 copy 라는 배열에 깊은 복사하기 (반복문 사용)
                    double[] origin = new double[] {163.5, 170.2, 180.7};
                    double[] copy = new double[origin.length]; // 복사본 배열 선언 및 할당

                    for(int i=0; i<origin.length; i++) {
                        // origin 배열의 i번째 위치의 데이터를 
                        //  copy 배열의 i번째 위치에 저장
                        copy[i] = origin[i];
                    }            
       // copy 배열의 값을 모두 출력해보자.
       for (자료형 변수명 : 배열명) {
// 배열의 첫번째 위치부터 마지막 위치까지 순서대로 접근
// 변수명을 통해 접근 가능! 
// (자료형을 배열의 자료형과 일치해야함)
       }
for (double item : copy) {
System.out.println(item);
}

 (2) 복사본 배열 = 원본배열.clone();

 (3) 복사본 배열 = Arrays.copyOf(원본 배열, 복사할 길이);   

 (4) System.arraycopy(원본배열명, 복사시작할인덱스, 복사본배열명, 복사본배열의 복사될 시작인덱스,

 

* 2차원 배열 : "배열" 안에 "배열"
                   "1차원 배열" 의 묶음
                   인덱스가 2개 필요!

* 선언 표현식
    자료형[][] 변수명;

* 할당 표현식
변수명 = new 자료형[행의크기][열의크기];
* 행의 크기 : 1차원 배열의 총 개수
* 열의 크기 : 해당 위치의 1차원 배열의 길이

* 2차원 배열 초기화
자료형[][] 변수명 = {
 new 자료형[],
 {값1, 값2, 값3}
};
  -> 서로 다른 길이의 1차원 배열을 할당할 수 있는가? 가능
자료형[][] 변수명 = new 자료형[행의길이][];
변수명[0] = new 자료형[5];
변수명[1] = new 자료형[3];

 

* 클래스(객체)

- 객체지향언어 : "객체" 를 "지향"하는 언어로 "객체" 중심으로 프로그램이 실행된다.
- "객체"     : 현실 세계에 독립적으로 존재하는 모든 것들을 의미
                         => 목적/가치/의미가 있는 것들
            => 유형, 무형, 개념, ...

- 구현하고자 하는 프로그램 상의 필요한 객체를 만들기 위해,
    "클래스"라는 틀을 먼저 만들어야 함.
=> 객체들의 속성(정보)들을 담아낼 그릇같은 존재

- 추상화 과정
  1) 구현하고자 하는 프로그램에서 필요한 객체를 생각하기
  2) 그 객체들이 가지는 공통적인 속성, 기능들을 추출하기
  3) 추출한 것을 가지고 구현하고자 한 프로그램의 "실질적인 목적"에 맞춰 불필요한 속성, 기능을 제거하기
  4) 최종적으로 추려진 속성들을 어떤 자료형과 어떤 변수명으로 사용할 것인지 생각하기
  
  
- 클래스는 "변수"와 "생성자"와 "메소드"로 구성되어 있다.

  * 변수부 (필드/멤버변수) : 객체의 상태(정보)를 담고 있는 것

       => 표현법
[접근제한자] [예약어] 자료형 변수명[ = 값];
   
   
  * 메소드부 : 객체의 동작/기능 등의 내용을 담고 있는 것
  
       => 표현법
[접근제한자] [예약어] 반환타입 메소드명([매개변수정보]) {
// 어떤 기능을 수행할 코드 : 제어문, 다른 메소드 호출, .. 변수선언, ...
}
   
   * 생성자 : 객체를 생성할 때 사용되는 것
-> 기본생성자 : 매개변수가 없는 상태
public 클래스명() {}
   
       => 표현법
접근제한자 클래스명([매개변수정보]) {
// 매개변수가 있을 경우 보통은 해당 변수에 초기화 작업을 수행
}
   
- 접근 제한자 : 접근할 수 있는 범위를 제한하는 것

    => 넓은 범위 순서로 나열해본다면..? public > protected > default > private
* public : 어디서든 접근 가능
* protected : 같은 패키지 내 또는 상속 관계
* default : 같은 패키지
* private : 클래스 내에서만 접근 가능
 
- 변수의 스코프
  1) 전역변수
     * 멤버변수 == 인스턴스변수 == 필드
  생성시점 : "new" 연산자를 통하여 객체 생성 시
  소멸시점 : 객체 소멸 시 같이 소멸
  
* 클래스변수 == static 변수
  생성시점 : "프로그램 실행"과 동시에 무조건 메모리 영역(static)에 할당
  소멸시점 : 프로그램 종료 시 소멸

* 지역변수
  생성시점 : 지역변수가 속한 특정 구역({}) 실행 시 메모리영역에 할당
  소멸시점 : 특정 구역({}) 종료 시 소멸
  

- 정보 은닉 : 데이터에 "직접"접근하지 못하도록 하는 것 ( private 접근제한자 사용 )
                  캡슐화를 통해 데이터에 "간접" 접근하여 사용할 수 있도록 관리함
 (setter / getter 메소드 : public 접근제한자 사용 )
 * setter : 데이터에 어떤 값을 저장하는 기능을 수행하는 메소드 ( 반환타입 : void )
 * getter : 데이터의 값을 조회하는 기능을 수행하는 메소드 ( 반환타입 : 해당 변수의 자료형 )
 
 
- 오버로딩 : 한 클래스 내에 "같은" 메소드명으로 여러 개를 정의하는 것
  * 성립 조건
    1) 같은 메소드명
    2) 매개 변수 개수/타입/순서 가 달라야 함

- 객체 배열 : "객체"를 저장하는 배열
* 선언 표현식
클래스명[] 변수명;
* 할당 표현식
변수명 = new 클래스명[배열길이];
* 선언과 동시에 할당 ( 배열을 할당 )
클래스명[] 변수명 = new 클래스명[배열길이];
.. 변수명[0] = new 클래스명();
System.out.println(변수명[0]); // --> (1) 0x123 (2) null (3) name값과 price값


// 아래 데이터가 저장된 메모리 구조를 그림판으로 그려보기
-----------------------------------------

int n1 = 30;

int[] numbers = {100, 200, 300};
System.out.println(numbers);      // 출력 결과 : 0x123

Student s1 = new Student("홍길동", 40);
System.out.println(s1);      // 출력 결과 : 0x201

Student[] sArr = new Student[3];
sArr[0] = new Student();
System.out.println(sArr);      // 출력 결과 : 0x400




'자바' 카테고리의 다른 글

자바 정리 3  (0) 2024.07.10
java 복습 정리  (0) 2024.07.10
java 과제  (0) 2024.06.23