[Java][국비교육] Day 10

Ga02·2023년 1월 9일

국비교육

목록 보기
9/82

🔎 2차원 배열

int num; //int형 변수 👉🏻 정수값 1개 저장
int[] arr1D; //int형 배열 👉🏻 (정수값) 여러 개 저장
int[][] arr2D; //(int형 배열)의 배열 👉🏻 ((정수값) 여러 개)를 여러 개

➰ 선언과 초기화

int[][] arr;
arr = new int[2][3];
arr[1][2] = 555;

System.out.println(arr[1][2]);555
  • 1차원 배열처럼 선언과 초기화를 동시에 가능
int[] arr1D = { 1, 2, 3, 4, 5 };

int[][] arr2D = {
					{1, 2, 3},
                    {4, 5, 6},
                    {7, 8, 9}
                }
👉🏻 33열의 2차원 배열 생성 / 3x3 배열

<2차원 배열의 요소 모두 출력하기>
for(int i=0; i<arr2D.length; i++) { //int[]의 수
	for(int j=0; j<arr2D[i].length; j++) { //int[] 안에 있는 int공간의 수
		System.out.print( arr2D[i][j] + " ");    
    }
    System.out.println();
}

➰ 2차원 배열 참조

int[][] arr2D = new int[3][3]; 👉🏻 33열의 2차원 배열 arr2D 선언 및 초기화

arr2D = new int[5][4]; 👉🏻 arr2D에 54열의 새로운 2차원 배열 생성
  • arr2D에 전에 있던 [3][3]배열의 주소는 지워지고 [5][4]배열 주소가 새롭게 저장됨
  • GC가 참조주소를 잃어버린 [3][3] 배열을 자동으로 수집 및 삭제하여 메모리누수(memory leak)을 방지해줌 -> 참조값 arr2D가 없다면 [3][3]배열은 다시 쓰여질 방법이 없으므로 버려진 값임

➰ 배열의 크기

int[][] arr = new int[3][]; ➡ 참조변수 기본값 null로 초기화
👉🏻 (int[]) * 3묶음 //뒤에서부터 읽기

arr[0] = new int[8];
arr[1] = new int[3];
arr[2] = new int[2];
👉🏻 각 arr[]마다 다른 크기의 int[] 공간을 가질 수 있음

System.out.println( arr ); ➡ 2차원 배열의 주소 출력
System.out.println( arr.length ); ➡ 3

System.out.println( arr[0] ); ➡ int[]의 주소 출력
System.out.println( arr[0].length ); ➡ 8

System.out.println( arr[1] );➡ int[]의 주소 출력
System.out.println( arr[1].length ); ➡ 3

System.out.println( arr[2] );➡ int[]의 주소 출력
System.out.println( arr[2].length ); ➡ 2


🔍 객체지향 프로그래밍

  • 객체(Object)들을 중심으로 객체들 간의 상호작용(데이터 전달, 교환)을 통해 프로그램으로 작동되도록 작성하는 프로그래밍 기법 👉🏻 객체를 기반으로 프로그램을 작성하는 기법

➰ 절차지향 프로그래밍, Procedural Programming

명령어(코드)들의 나열로 프로그램이 작동되도록 작성하는 기법

  • 코드가 순차적으로 실행되도록 작성

➰ 객체지향 프로그래밍, Object Oriented Programming, OOP

명령어들을 하나의 집합(모음) 단위인 객체로 묶어 프로그래밍 하는 기법

  • 객체, Object

    • 프로그램으로 구현(표현)하려는 모든 대상들
    • 현실 세계에 존재하는 모든 대상들을 객체로 생각하면 됨
  • 클래스, Class

    • 객체를 프로그램으로 표현하기 위해 코드로 작성된 것
    • 객체를 추상화하여 작성
  • 추상화, Abctraction

    • 프로그램에서 필요한 요소들만 집중해서 정리하는 작업 ➡ 불필요하거나 중요하지 않은 요소는 무시
    • 객체들의 공통적인 속성, 정보, 기능, 행위 등으로 추출하는 작업

➰ 클래스, Class

  • 실행 클래스
    메인 메소드를 정의하고 있는 클래스 👉🏻 프로그램을 실행할 수 있는 클래스
  • 일반 클래스, 기능클래스
    메인 메소드가 없는 클래스 👉🏻 스스로 프로그램을 시작할 수 없는 클래스
    • 멤버필드, Member Feild ➡ 선언
      : 객체의 데이터, 정보, 속성을 변수 또는 상수로 추상화한 것
    • 멤버 메소드, Member Method ➡ 정의
      : 객체의 기능, 행위, 동작을 구현 / 메소드 1개 당 기능 1개
public class Class_01 { //기능 클래스
	
    int num;
    String data;
    
    public void display() {
    	System.out.println("display() 메소드 사용(호출, call)");
    }
}

public class Main_01 { //실행 클래스
	public static void main(String[] args) {
    	
        Class_01 c01; 👉🏻 Class_01타입 객체변수 c01 선언 
        c01 = new Class_01(); 👉🏻 Class_01 타입의 인스턴스를 생성, 참조값을 c01에 대입
        
        System.out.println(c01);
        ➡ java06_class.Class_01@5ccd43c2 //객체변수를 출력하면 참조값(래퍼런스, Refernce)이 출력됨
        
        //----------------------------------------------------------------
        <멤버필드에 대입>
        c01.num = 123;
        c01.data = "Apple";
        
        <클래스의 멤버 메소드 호출>
        c01.display();
        
        //----------------------------------------------------------------
        
        Class_01 c02 = new Class_01(); //인스턴스 생성 및 초기화
        Class_01 c03 = new Class_01(); //인스턴스 생성 및 초기화
        Class_01 c04 = null; 
        
        c02.num = 200;
        c03.num = 300;
        c04.num = 500 //->Null Pointer Exception
        //	null을 참조하고 있는 객체변수를 이용하여 참조연산자를 사용하면 '참조할 것이 없다'는 오류 발생
        //	예외가 발생한 Line의 .(참조연산자)의 왼쪽에 있는 코드가 null값을 갖고 있을 것

➰ 객체지향의 특징

  • 추상화
  • 캡슐화
  • 상속성(==재사용성)
  • 다형성

➰ 인스턴스, Instance

클래스(class) 코드를 통해 생성된 실체 (실제 메모리 공간)

  • 프로그램에 사용할 수 있도록 메모리에 생성된 결과물 객체
  • 클래스 ➡ 인스턴스 / 건축 설계도 ➡ 건물

➰ 인스턴스화, Instantiate

인스턴스를 만드는 작업 👉🏻 메모리에 실체를 만드는 작업

  • 메모리에 데이터를 저장할 수 있는 공간이 생성됨 (new 연산자 이용)

🔍 접근 제한자, Access Modifier

객체의 멤버필드(고유한 속성), 멤버 메소드(고유한 기능)에 대한 정보나 기능을 객체의 외부에서 함부로 접근할 수 없게 제한

  • 객체는 추상화를 통해 중요하고 필수적인 정보만 추출하여 코드로 만든 것 👉🏻 객체의 멤버들을 함부로 접근할 수 있게 공개하면 프로그램에 악영향을 미칠 수 있음 ❗ 접근 제한의 필요성 ❗

➰ 접근제한자의 종류

멤버필드, 멤버메소드에 적용하며, 종류에 따라 공개범위가 단계적으로 달라짐

  • private

  • default

  • protected

  • public

public class Class_02 {
	private int num1 = 100; // 설계도에서는 값을 대입할 수 없음
    👉🏻 일종의 예약. 나중에 인스턴스가 만들어질 때 별일 없으면 100을 대입하겠음
    
    int num2 = 200;
    
    protected int num3 = 300;
    
    public int num4 = 400;
}

public class Main_02 {
	public static void main(String[] args) {
    	
        Class_02 cl = new Class_02();
        
        System.out.println(cl.num4); //public
        System.out.println(cl.num3); //pritected
        System.out.println(cl.num2); //default
        
        System.out.println(cl.num1); //private
        //공개범위가 맞지 않는 멤버를 사용한 경우 "is not visible" 에러
        //private를 외부인 Main 클래스에서 보려해서 생긴 오류
profile
IT꿈나무 댓츠미

0개의 댓글