변수는 JAVA가 유래된 C++에서부터 기본으로 여겨진 중요한 개념이다.

그만큼 프로그래밍에서 다양한 목적으로 사용되고, 코드를 작성할때 반드시 나오는 개념이다.

JAVA의 참조변수와 일반변수에 대해 정리해보겠다.

 

일반변수 vs 참조변수

일반변수 참조변수
값을 직접 저장하는 변수. 메모리에 할당됨 다른 변수 대신 사용할 수 있는 대체품. 변수와 같은 위치
=값을 직접 저장함 =다른 변수를 가리키는 별칭, 매개변수로 사용
기본 데이터 타입 (int, double, char 등 ... ) 변수의 별칭 (boolean -> Boolean)
초기화 없이 사용 가능 선언과 동시에 초기화 필요함
- & 기호 사용

 

예시

public class Main {
    public static void main(String[] args) {
        int Value = 10;
        int[] reValue = { Value }; // reValue는 Value의 참조 변수입니다.

        System.out.println("Value: " + Value);
        System.out.println("reValue: " + reValue[0]);

        reValue[0]++; // Value도 증가합니다.

        System.out.println("Value: " + Value);
        System.out.println("reValue: " + reValue[0]);
    }
}

 

reValue는 Value의 참조 변수이다. 배열 안에서 reValue를 변경하면 Value도 함께 변경된다.

객체를 참조하는 변수로도 활용할 수 있다.

 

객체를 참조하는 것으로도 활용할 수 있다.

클래스는 객체를 생성하기 위한 템플렛이며 객체는 클래스의 인스턴스이다. 클래스를 사용하여 객체를 생성하고 참조형 변수를 통해 해당 객체를 참조할 수 있다.

class Car {
    String brand;
    Car(String brand) {
        this.brand = brand;
    }
}
// 객체 생성
Car myCar = new Car("Toyota");

 

참조형 변수를 선언하면 객체는 메모리에 생성된다.

new 키워드를 사용하여 객체를 생성하고, 생성된 객체는 참조형 변수에 주소를 통해 연결되는데

이를 통해 객체의 필드에 접근하거나 메소드를 호출할 수 있다.

 

//문자열을 저장하는 String 객체 생성
String st = new String("Hello, Java!");
System.out.println(myCar.brand);
//출력 결과 : Toyota

 

null 값

참조형 변수는 초기화되지 않으면 기본적으로 null값으로 초기화된다.

null은 아무런 객체를 참조하고 있지 않음을 나타낸다.

 

String myString; 
// 초기화되지 않은 경우, 기본적으로 null로 초기화

 

가비지 컬렉션 (Garbage Collection)

메모리에 생성된 객체 중에서 더 이상 참조되지 않는 객체는 가비지 컬렉터에 의해 자동으로 제거된다.

메모리 누수를 방지하고 관리하기 위해 자바에서 자동으로 진행되는 과정이다.

 

메소드에 참조형 변수를 전달될 때, 해당 변수에 작성된 객체의 주소가 복사되어 전달된다.

메소드 안에서 상태를 변경하면 호출된 곳에서도 변경된 상태를 볼 수 있다.

 

public static void Example(String str) {
    str = str + " World!";
}
// ...
String greeting = "Hello";
modifyString(greeting);
System.out.println(greeting); 

// 출력 결과: Hello

 

참조형 변수는 객체 지향 프로그래밍의 핵심 요소이다!!

객체의 주소를 통한 연결은 다양한 기능을 제공하며 (상속, 다형성 등등등...) 

메모리 관리 자동화와 동적 객체 생성을 지원한다.

'CS > JAVA' 카테고리의 다른 글

컨트롤러 어노테이션  (0) 2024.06.29
Getter/Setter  (0) 2024.06.26
클래스 설정  (0) 2024.01.23
지역변수의 특징  (0) 2024.01.18
객체 지향 프로그래밍  (0) 2024.01.18

객체 지향 프로그래밍에서 클래스는 객체를 만드는 설계도라고 설명했었다.

그러면 클래스가 여러개일 경우 관리가 어려워지지 않을까?

 

그래서 나온게 패키지라는 개념이라고 한다. 패키지는 여러 클래스를 하나의 디렉토리에 묶어놓은 것으로 

클래스를 관리하고 클래스 간의 상속관계를 관리하는 역할을 한다.

 

인스턴스 생성 방법에서 두 클래스의 차이가 없다.

서로 다른 패키지의 두 클래스는 인스턴스 생성 시 사용하는 이름이 다르다.

서로 다른 패키지의 두 클래스 파일은 저장되는 위치가 다르다.

동일 이름의 클래스 파일을 같은 위치에 둘 수 없다.

 

컴파일 과정에서 클래스 파일이 저장되어야 하는 위치는 상대적으로 결정이 된다.

그리고 이렇게 결정된 위치는 컴파일 이후에 바꿀 수 없다.

 

패키지 이름에도 규칙이 있을까?

패키지 이름은 모두 소문자로 구성된다,

인터넷 도메인 이름의 역순으로 이름을 구성한다.

이름 끝에 클래스를 정의한 주체 또는 팀의 이름을 추가한다.

 

import 선언 방법 (ctrl + o 단축키)

import com.kh.smart.Circle;

/*동일한 이름의 두 클래스에 대한 import 선언은 컴파일 오류*/

import com.kh.smart.Circle;
import com.kw.simple.Circle;

 

패키지 전체 기능 import 선언

 

import com.kh.smart.*;

com.kh.smart 패키지로 묶인 전체 클래스에 대한 패키지 선언

 

 

'CS > JAVA' 카테고리의 다른 글

Getter/Setter  (0) 2024.06.26
참조변수와 일반변수에 대하여  (1) 2024.03.07
지역변수의 특징  (0) 2024.01.18
객체 지향 프로그래밍  (0) 2024.01.18
메서드의 개념  (0) 2024.01.18

지역변수는 메소드 내에서 선언된 변수로 해당 메소드 내에서만 사용할 수 있다.

메소드 호출이 끝나면 자동으로 소멸되며 초기화하지 않으면 컴파일 에러가 발생한다.

이러한 변수는 메소드의 블록 안에서만 유효하며, 메소드가 종료되면 메모리에서 사라진다.

 

지역변수의 생존

지역변수는 메소드 내에서 선언되어 메소드 안에서만 사용이 가능하다.메소드 호출이 끝나면 지역변수는 자동으로 소멸된다.초기화하지 않은 지역변수를 사용하면 컴파일 에러가 발생한다.

 

지역변수는 메소드 내에서 임시적으로 사용되는 값들을 저장하기 위해 활용된다.

이러한 변수는 메소드의 실행 흐름에서 필요한 데이터를 임시로 저장하고 처리하는데 사용된다.

 

지역변수는 메소드 내부에서만 사용할 수 있다면 프로그램 전체에서 사용되는 변수도 있을까?

전역변수는 어떤 변수 영역 내에서도 접근 할 수 있는 변수이다.

이 변수는 프로그램 전체에서 공유되며 어디서든 읽고 쓰기가 가능하다.

전역 변수는 프로그램이 시작될 때 생성되고 프로그램이 종료되면 소멸한다.

 

프로그램 전체에서 접근 가능하며, 어디서든 사용할 수 있다.
함수 내부에서 선언할 필요 없이 바로 사용할 수 있다.


주의사항


전역 변수의 이름을 지역 변수와 구분하기 위해 다르게 지정하는 것이 좋다.
프로그램 전체에서 공유되기 때문에 적당히 사용해야 한다.

 

지역변수와 전역변수의 차이점

1. 범위와 생존시간

지역변수는 함수(메소드) 내부에서 선언되어 해당 함수 내에서만 돌아간다.

함수 호출이 끝나면 지역변수는 자동으로 소멸된다.

 

전역변수는 프로그램 전체에서 접근할 수 있는 변수로, 함수 외부(클래스)에서 선언된다.

프로그램이 시작될 때 생성되고 프로그램이 종료되면 소멸된다.

 

2. 초기화
지역변수는 초기화하지 않으면 쓰레기 값이 저장된다.
전역변수는 자동으로 0으로 초기화됨

 

 

 

'CS > JAVA' 카테고리의 다른 글

참조변수와 일반변수에 대하여  (1) 2024.03.07
클래스 설정  (0) 2024.01.23
객체 지향 프로그래밍  (0) 2024.01.18
메서드의 개념  (0) 2024.01.18
2차원 배열  (0) 2024.01.18

JAVA 언어를 공부한다면 귀에 피가 나도록 들었을 객체지향 프로그래밍. 

대체 객체 지향 프로그램이 뭐길래, 얼마나 좋길래

백엔드 개발 환경에서 자바가 20년째 사용되고 있는 걸까?

 

기존의 프로그램 언어는 절차적 프로그래밍으로 구성되어 있다. 대표적으로는 C언어가 있다.

프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수를 설계하는데, 

하드웨어의 작업 처리 방식과 유사하여 빠르게 처리된다.

 

객체 지향 프로그램은 객체들의 결합으로 파악하는 컴퓨터 프로그래밍이다. 

마치 수많은 부품들로 완전한 자동차가 만들어지는 것과 같다.

 

이렇게 만들어진 객체들은 각자 독립적인 역할을 가지기 때문에 코드의 유지보수를 하기 유리하며

코드의 재사용을 통해 반복적인 코드를 최소화하고 간결하게 표현할 수 있다.

ex) 참조변수

 

객체 지향 프로그래밍에는 4가지 주요 특징이 있다.

1. 추상화 : 공통적인 속성과 기능으로 객체를 정의한다.

2. 상속 : 기존 클래스의 특성을 새로운 클래스에 물려준다

3. 다형성 : 같은 이름의 메서드를 다양한 방식으로 구현하여 다양한 객체를 처리한다.

4. 캡슐화 : 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶는다.

 

장점

유지 보수 용이성: 객체 지향적 설계를 통해 프로그램을 유연하고 변경이 용이하게 만들 수 있다.
가독성: 객체 지향 코드는 가독성이 높아 개발자들이 이해하기 쉽다.
재사용성: 객체는 재사용이 가능하여 개발 효율성을 높일 수 있다.
테스트 용이성: 객체 지향 프로그래밍은 테스트가 쉽다.

 

단점

설계 어려움: 객체 지향 프로그래밍은 초기 설계 단계 구성이 비교적 어렵다.
작은 규모의 프로그램에서 오버헤드: 작은 규모의 프로그램에서는 객체 지향적으로 작성하는 것이 더 오래 걸릴 수 있다.
성능 저하: 메모리 사용량이 많아 성능이 저하될 수 있다.

 

자바가 처음 나왔을 때 부터 개발을 하셨던 시니어 개발자 분의 인터뷰를 보았는데, 

초창기 자바는 굉장히 속도가 느려 답답했다고 한다. 하지만 지금은 기술의 발전으로 단점이 보안되어 

체감상 컴파일하는데 그닥 오래 걸리지 않는 것 같다 (아님말고...)

 

자바에서 추상 클래스를 사용하는 이유

추상 클래스는 객체를 만들기 위한 설계도면과 같다. 이 설계도를 통해 객체들의 공통적인 특성을 정의하고

이를 바탕으로 객체를 생성한다. 추상 클래스는 이와 같은 이유로 사용된다.

 

유지 보수 용이성

 

추상 클래스를 사용하여 객체 간의 필드와 메서드의 이름을 통일하면 소스의 가독성이 높아진다.
코드를 재사용하고 유지보수하기 쉽다.


다중 상속 가능


추상 클래스는 다중 상속이 가능하다.
다른 클래스에서 상속받을 때 발생하는 모호함을 해결할 수 있습니다.


메서드 오버라이딩 강제


추상 클래스는 추상 메서드를 하나 이상 가져야 합니다.
이로 인해 하위 클래스에서 해당 메서드를 반드시 오버라이딩해야한다.


코드 종속성을 낮춤


추상 클래스로 추상 메서드를 지정하면 메서드의 input 값과 output 값이 고정되어 있다.
변경에 대한 영향도가 작아지며, 코드의 유연성이 높아진다.

 

클래스와 객체의 차이점

 

클래스는 객체를 만들기 위한 틀로서, 객체들의 공통적인 특성을 정의하고 이를 바탕으로 객체를 생성한다.

객체는 클래스를 기반으로 만들어진 실제 데이터로서, 특정한 기능을 수행하도록 프로그래밍된다. 객체는 각각의 고유한 속성과 독립적인 기능을 가지며 다른 객체와 구별된다.

 

 

오버로딩과 오버라이딩은 객체지향프로그래밍에서

다형성을 구현하는데 사용되는 두 가지 개념이다.

 

오버로딩

메서드의 이름이 같지만 매개변수의 타입이나 개수가 다른 메서드를 여러개 정의한다.

유사한 작업을 수행하는 메서드가 있을때 각각의 이름과 매개변수를 다르게 해주는 기법이다.

 

오버로딩의 특징

 

1. 메소드의 이름이 같아야 한다.

2. 매개변수의 개수나 타입이 달라야 한다.

3. 리턴 타입은 오버로딩의 조건에 포함되지 않는다.

 

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    public int add(double a, double b) {
        return a + b;
    }
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

 

오버라이딩

 

상속 관계에 있는 자식 클래스가 부모 클래스에게 물려받은 메소드를 재정의하는 것이다.

부모 클래스의 메서드를 자신의 상황에 맞춰 새롭게 구현할 수 있다.

 

오버라이딩의 조건

 

1. 부모 클래스의 메소드와 동일한 시그니처 (이름, 매개변수의 타입 및 개수) 를 가져야 한다.

2. 오버라이딩하는 메소드는 부모 클래스의 메서드보다 접근성이 좁아질 수 없다.

 

// 부모 클래스 (SuperClass)
class Calculator {
    public void print() {
        System.out.println("Today is...");
    }
}

// 자식 클래스 (SubClass)
class Day extends Calculator {
    // 부모 클래스의 메소드를 재정의
    public void print() {
        System.out.println("It's the 1st day.");
    }
}

 

 

getter, setter을 사용하는 이유

getter과 setter은 private를 사용해 객체의 데이터를 보호하기 위해 캡슐화되어 외부에서 직접 접근할 수 없게 한다.

그럼 왜 데이터 은닉화가 필요할까? 유효한 값들만 저장하고 올바르지 않은 입력들은 미리 제한할 수 있기 때문이라고 한다. 

 

예를 들어 setter에서 유효범위를 넘은 정수가 들어왔을 때의 처리를 하고나서 set하거나 예외처리를 해버릴 수 있는 것이다. getter도 마찬가지로 굳이 예를들자면 자료에 무언가 더하거나 빼고 준다든지가 가능하다.

 

public class Vehicle {
    private String color; // 색상 필드

    // Getter
    public String getColor() {
        return color;
    }

    // Setter
    public void setColor(String c) {
        // 유효한 색상만 할당
        if (isValidColor(c)) {
            this.color = c;
        } else {
            throw new IllegalArgumentException("유효하지 않은 색상입니다.");
        }
    }

    // 유효한 색상인지 검사
    private boolean isValidColor(String c) {
        // 예시: 특정 범위 내의 색상만 유효하다고 가정
        return c.equals("Red") || c.equals("Blue") || c.equals("Green");
    }
}

 

자바는 클래스 간의 관계를 구축을 상속으로 한다.

부모 클래스가 가지고 있는 필드와 메서드를 자식 클래스가 물려받는 것이다.

자식 클래스는 부모 클래스의 멤버를 그대로 사용하거나 필요에 따라 재정의할 수 있다.

 

부모 클래스 타입으로 다양한 자식 클래스 객체를 참조할 수 있다.

 

동물 클래스가 있고, 이를 상속받은 각각의 자식 클래스로 개, 고양이, 새를 만들었다고 가정한다면,

동물 클래스에는 공통적인 특성과 메서드가 있고, 각 자식 클래스는 이를 확장하여

자신만의 특성과 메서드를 추가할 수 있다.

 

이렇게 상속을 통해 코드를 구조화하고 재사용할 수 있다.

 

 

 

'CS > JAVA' 카테고리의 다른 글

클래스 설정  (0) 2024.01.23
지역변수의 특징  (0) 2024.01.18
메서드의 개념  (0) 2024.01.18
2차원 배열  (0) 2024.01.18
1차원 배열  (0) 2024.01.17

메서드 (Method)


메서드는 클래스의 내부에 존재하는 영역으로 특정 기능을 하는 코드를 묶어서 나타내는 것이다. 

즉, 특정 기능을 수행하기 위한 코드들의 집합체이다.

 

특정 기능을 수행한다는 것은 입력받은 데이터를 일련의 처리 과정을 통해

만들어진 결과값을 반환하는 것을 의미한다.

 

// 클래스(Class)
public class Main {
	// 메서드(Method)
	public static void main(String[] args){
		// 특정 기능을 구현하는 곳
	}
}

메서드의 정의

메서드는 처리 결과값을 반환한다. 처리 결과는 값의 형태로 된 데이터를 뜻하며, 이 데이터가 반환 값이다.

값은 여러 종류로 나뉜 데이터로 정수, 문자, boolean 등 다양하다.

 

이러한 값의 종류를 데이터 타입이라고 하며 자료형이라고 한다. 따라서 반환 타입은 메서드가 반환할 값의 종류를

의미하며 메서드를 정의할 때 반환할 값의 타입을 명시해야 한다.

public static void main(String[] args){
}

 

 

매인 메서드

main 함수는 프로그램 실행 시 처음으로 수행되는 함수이기 때문에,

자바로 프로그래밍할때 반드시 메인 메서드가 필요하다.

프로그램의 내부에서 값을 호출할 수 없으며 자바의 시작은 main 함수명으로 해야하는 규칙이 있음.

public class Test {
  public static void main (String[] args) {
    System.out.println(args[0]);
 
    strMethod("def");
  }
  public static void strMethod(String srg) {
    System.out.println(srg);
  }
}

public, static, void 선언이 의미하는 바는?

public

다른 타입에서 객체를 불러올 수 있다.

어느 곳에서든 해당 객체를 참조할 수 있어 공개되어 있다.

staic

static은 클래스와 관련이 있다.

클래스의 객체를 만들지 않더라도 이 함수는 만들 수 있다.

static 객체에서 static이 아닌 객체를 호출하는 것은 불가능하다.

static이 먼저 정의되기 때문에 아직 정의되지 않은 객체는 호출할 수 없다.

void 

리턴값이 없다는 것이다. 만약에 그 함수가 int 값을 리턴한다면 void 대신 int를 적는다.

main 옆에 있는 (String[] args)의 의미는?

args 문자열을 배열로 사용하겠다는 의미

args는 변수명이기 때문에 args가 아니어도 상관은 없으나 String[] args 구문 자체를 뺄 수는 없다.

매개 변수


1. 메서드는 데이터를 입력받아 해당 데이터를 일련의 처리 과정을 통해 결괏값을 반환한다.

2. 메서드 외부에서 메서드 내부로 전달하는 입력 값이 존재한다. 이를 매개변수라고 한다.

3. 값(데이터)는 변수를 통해 저장할 수 있다.

이를 메서드의 매개변수로 지정함으로서 메서드 내부에서 사용할 수 있게 해 준다.

4. 메서드 이름 옆에 소괄호() 를 통해 매개변수의 타입과 이름을 공백으로 구분하여 지정한다.

5. 매개변수의 타입은 어떤 데이터 타입을 메서드가 입력받아 사용할 것인지를 지정하는 곳이다.

6. 매개변수 이름은 입력받은 값에 이름을 붙여 메서드 내부에서 이름을 통해 사용한다.

package com.kh.EX01;

public class BankAccountPO {
    // 필드
    static int balance = 0; // 예금잔액
    
    public boolean balanceEquals(BankAccount act01) {
        if (balance == act01.balance) {
            act01.balance = 0;
            return true;
        } else {
            return false;
        }
    }

    public static void main(String[] args) {
        deposit(10000); // 입금 진행
        checkMyBalance(); // 잔액 확인
        withdraw(3000); // 출금 진행
        checkMyBalance(); // 잔액 확인
    }

    public static int deposit(int amount) { // 입금
        balance += amount;
        return balance;
    }

    public static int withdraw(int amount) { // 출금
        balance -= amount;
        return balance;
    }

    public static int checkMyBalance() { // 예금 조회
        System.out.println("잔액 : " + balance);
        return balance;
    }
}

내부 데이터:
 deposit(10000); // 입금 진행
 checkMyBalance(); // 잔액 확인
 withdraw(3000); // 출금 진행
 checkMyBalance(); // 잔액 확인

기본 타입 

byte, short, char, int, long, float, double, boolean 8개의 타입을 말한다.

기본 타입 변수에는 값 자체가 저장된다.

//기본 타입 변수의 예
int age = 28;
double price = 100.5;

참조 변수

기본 타입을 제외하고 배열, 열거, 클래스, 인터페이스 등을 말한다.

참조 타입의 변수에는 객체(메모리)의 번지가 저장된다.

//참조 타입 변수의 예
String name="신용권";
String hobby="독서";

 

main 옆에 있는 (String[] args)의 의미는?

args 문자열을 배열로 사용하겠다는 의미

args는 변수명이기 때문에 args가 아니어도 상관은 없으나 String[] args 구문 자체를 뺄 수는 없다.

public static void main(String[] args){
	int num1 = 5;
    int num2 = 7;
    System.out.println("5 + 7 = " + (num1 + num2));
 }

메소드에 대한 이해와 메소드의 정의

public static void main(String[] args){
	System.out.println("프로그램의 시작");
    //hiEveryone(12,13) 변수의 옵션
    hiEveryone(12); //12를 전달하며 hiEveryone 호출
    hiEveryone(13); //13을 전달하며 hiEveryone 호출
    System.out.println("프로그램의 끝");
}

//매개변수가 하나인 메소드의 정의
public static void hiEveryone(int age){
	System.out.println("좋은 아침입니다.");
    System.out.println("제 나이는" + age + "세 입니다.");
}

문제풀이:
프로그램의 시작
좋은 아침입니다
제 나이는 12세 입니다.
좋은 아침입니다.
제 나이는 13세 입니다.
프로그램의 끝

 

매개변수가 0, 2개인 메소드

 

public static void main(String[] args){
	double myHeight = 175.9;
    hiEveryone(12, 12.5);
    hiEveryone(13, myHeight);
    byEveryone();
}

//매개변수가 둘인 메소드의 정의
public static void hiEveryone(int age, double height){
	System.out.println("제 나이는" + age + "세 입니다.");
    System.out.println("저의 키는" + height + "cm 입니다.");
}

//매개변수가 없는 메소드의 정의
public static void byEveryone(){
	System.out.println("다음에 뵙겠습니다.");
}

출력결과:
제 나이는 12세 입니다.
저의 키는 12.5cm입니다.
제 나이는 13세 입니다.
저의 키는 175.9cm 입니다.
다음에 뵙겠습니다.

 

값을 반환하는 메소드

 return 키워드를 사용해 처리 결과를 반환할 수 있다.

return은 메소드를 호출한 영역으로 값을 반환하는 것과 메소드의 종류 두 가지가 있다.

//void: 값을 반환하지 않음을 의미
public static void main(String[] args){
	int result;
    result = adder(4, 5); //adder가 반환하는 값을 result에 저장
    System.out.println("4 + 5 = " + result);
    System.out.println("3.5 x 3.5x - " + square(3,5));
}

//return: 값의 반환을 명령
public static int adder(int num1, int num2){
	int addResult - num1 + num2;
    return addResult; //addResult의 값을 반환
}

public static double square(double num){
	return num * num; //num * num의 결과를 반환
}

출력결과:
4 + 5 = 0
3.5 x 3.5 = 12.25

 

메소드의 호출

메서드는 정의하는 것만으로는 실행되지 않는다.

메서드를 정의하는 것은 동작에 대한 처리 과정을 기술한 것이다.

//메서드 이름(값1, 값2, ....)
method(value1, value2, ...);

//예시로 정의한 add메서드를 사용
add(5, 10);

 

메서드 add의 매개변수는 2개로 지정하여 작성했기 때문에 호출할 때에도 2개의 값을 지정해주어야 한다.

5와 10을 넣음으로서 num1에는 5, num2에는 10이라는 정수 값이 임시적으로 저장된 후 5 + 10 연산이 수행되어

반환 값이 15인 데이터를 리턴한다.

'CS > JAVA' 카테고리의 다른 글

지역변수의 특징  (0) 2024.01.18
객체 지향 프로그래밍  (0) 2024.01.18
2차원 배열  (0) 2024.01.18
1차원 배열  (0) 2024.01.17
출력 메소드  (0) 2024.01.17

2차원 배열


 

자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열 존재

2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여 (앞 번호는 행, 뒷 번호는 열 [0][0])

 

 

가변 배열의 선언과 할당

2차원 배열 선언시 마지막 열크기를 지정하지 않고 추후에 각기 다른 길이의 배열을 생성함으로서

고정된 형태가 아닌 보다 유동적인 가변 배열을 구성할 수 있다.

자료형[][] 변수이름 = new 자료형[행크기][];

int[][] arr = new int[3][];
arr[0] = new int[3];
arr[1] = new int[2];
arr[2] = new int[5];

int[][] arr= {{11},{22,33},{44,55,66}};

 

 

참조변수 선언과 배열의 생성

 

int[] arr1;
Arr1= new int[4]
arr1 arr1[0] arr1[1] arr1[2] arr1[3]

 

int[][] arr2;
arr2 = new int[3][4];
arr2 arr2[0][0] arr2[0][1] arr2[0][2] arr2[0][3]
    arr2[1][0] arr2[1][1] arr[1][2] arr2[1][3]
    arr2[2][0] arr2[2][1] arr2[2][2] arr2[2][3]

 

2차원 배열 선언과 할당


배열선언

자료형[][] 배열명;
자료형 배열명[][];
자료형[] 배열명[];

배열할당

자료형[][] 배열명 = 자료형[행크기][열크기];
자료형 배열명[][] = 자료형[행크기][열크기];
자료형[] 배열명[] = 자료형[행크기][열크기];

 

배열의 접근

int[][] arr = new int[3][3]
     
     
     

 

arr[0][0] = 1;
1    
     
     
arr[2][2] = 9;
     
     
    9
arr[1][0] = 5;
     
5    
     
arr[0][1] = 7;
  7  
     
     

 

2차원 배열의 실제 구조

//다수의 1차원 배열을 엮어서 구성이 되는 2차원 배열

int[][] arr = new int[3][4];

 

2차원 배열의 초기화

int[][] arr = {{11, 22, 33}, {44,55,66},{77,88,99}};
11 22 33
44 55 66
77 88 99
int[][] arr = {{11},{22,33},{44,55,66}};
11    
22 33  
44 55 66

 

 

'CS > JAVA' 카테고리의 다른 글

객체 지향 프로그래밍  (0) 2024.01.18
메서드의 개념  (0) 2024.01.18
1차원 배열  (0) 2024.01.17
출력 메소드  (0) 2024.01.17
자료형의 종류  (1) 2024.01.17

+ Recent posts