자바(Java) 배열과 클래스

유필선·2024년 3월 4일
0

자바(Java)

목록 보기
3/20
post-thumbnail

배열

배열이란 ?

동일한 타입의 값들을 하나의 묶음으로 저장한 자료구조이다.
즉 여러 값들이 같은 의미를 지니면서 서로 연관성이 있을 때, 이들을 하나의 덩어리로 묶을 수 있다. 각 데이터에 인덱스(index)를 부여해놓은 자료구조이고, 이렇게 묶인 데이터들의 집합을 배열이라 한다.

배열의 각 인덱스는 각 항목의 데이터를 읽거나 저장하는데 사용되며 다음과 같이 배열 이름 옆에 대괄호 [ ]에 기입되고, 인덱스는 0부터 시작

배열의 특징

  1. 배열은 같은 타입의 데이터만 저장할 수 있다.
  • int 배열은 int 값만 저장 가능하고, String 배열은 문자열만 저장가능
  • 선언과 동시에 저장할 수 있는 타입이 결정됨
  • 만약 다른 타입의 값을 저장하려고 하면 타입 불일치(Type mismaych)컴파일 에러 발생
  1. 한번 생성된 배열은 길이를 늘리거나 줄일 수 없다.
  • 3개의 값을 저장하는 배열을 생성했다고 가정하고, 프로그램 실행 도중에 5개의 값을 저장하는 배열로 수정할 수 없다.
  • 반대로 2개의 값만 저장하는 배열로 수정할 수도 없다.
  • 만약 5개의 값을 저장해야 하는 경우가 발생한다면 길이 5의 새로운 배열을 생성하고, 기존 배열 항목을 새 배열로 복사해야한다.

배열 선언 및 생성 방법

배열 변수를 선언방법

배열을 사용하기 위해선 배열 변수를 선언해야한다. 배열 변수 선언은 두 가지 형식으로 작성이 가능하다.

// 형식 1 예시
int[] age;
double[] tall;
String[] name;

// 형식 2 예시
int age[];
double tall[];
String name[];

배열 생성방법

배열 객체를 생성하려면 값 목록을 이용하거나 new 연산자를 이용하는 방법이 있다.
1. 값 목록으로 배열 생성

int[] arr {1,2,3,4,5};

중괄호{ }는 주어진 값들을 항목으로 가지는 배열 객체를 힙에 생성하고, 변수는 스택에 생성하게 된다.

2. new 연산자로 배열 생성
값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new 연산자로 다음과 같이 배열 객체를 생성할 수 있다.

int[] arr = new int[5];
// 길이가 5인 int[ ] 배열을 생성.

new 연산자로 배열을 처음 생성할 경우 배열은 자동적으로 기본값으로 초기화된다.

  • 클래스 함수에도 똑같이 적용된다.
int[] scores = new int[30];

만약 String 배열을 생성했다면 names 배열의 경우 names[0] ~ names[29]까지 모두 null 값으로 초기화된다.

String[] names = new String[30];
// 길이가 30인 String[ ] 배열 생성

배열 생성 시 주의사항

  • 배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않는다.
  • 배열 변수를 미리 선언한 후 값 목록들이 나중에 결정되는 상황이라면 다음과 같이 new 연산자를 사용해서 값 목록을 지정해주면 된다.
  • new 연산자 바로 뒤에는 배열 변수 선언에서 사용한 “타입[ ]”를 붙여주고 중괄호 { }에는 값들을 나열해 준다.

클래스

클래스란 ?

  • 자바에서 클래스(class)는 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다.
  • 프로그래밍적 언어로 표현하면 '어떠한 객체의 변수(valiable), 메소드(method)의 집합이다.'

클래스 작성 규칙

  • 하나 이상의 문자로 이루어져야 한다
  • 첫 번째 글자에는 숫자가 올 수 없다.
  • $ , _ 외에는 특수문자 사용 불가 ($port (o), c@r(x))
  • 자바 명령어, 키워드(예약어)는 사용할 수 없다.(while, for, int 등 사용불가)
  • 이름은 대소무자를 구분한다.(보통, 첫번째 글자는 대문자로 작성)

클래스의 구성

  1. 자바 클래스는 class키워드를 사용하여 선언한다
  2. 클래스의 구성요소를 멤버(member)라고 부르며, 멤버는 속성을 표현하는 필드(field)
    기능을 나타내는 메소드(method)를 가진다
  3. 클래스는 생성된 객체의 필드를 초기화 해주는 메소드인 생성자(Constructor)를 가진다.

필드(field)

객체 내에 값을 저장한 맴버 변수를 필드라고 부른다.
클래스 내에서 선언된 위치에 따라 클래스 변수(static variable), 인스턴스변수(instance variable), 지역변수(local variable)로 구분된다.

메소드(method)

메소드는 함수이며, 객체의 행동을 구현한다.
어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 한다.

생성자(constructor)

클래스의 이름과 동일한 메소드를 생성자라고 한다.
생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메소드이다.
즉, 자바에서 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 메소드를 생성자라고 한다.

인스턴스(instance)

클래스를 사용하기 위해 해당 클래스 타입의 객체(object)를 선언
클래스로부터 객체를 선언하는 과정을 인스턴스화 라고 한다.
이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 한다.
즉, 인스턴스는 메모리에 할당된 객체를 의미

클래스의 예시

자바에서는 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있습니다.
이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있습니다.
하지만 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 됩니다.

1. 클래스(class)

  • 차(car) : 설계도

2. 필드 (field)

  • car.name = "링컨_노틸러스";
  • car.year = 2023;
  • car.color = "coral";
  • car.maxSpeed = 300;

3. 메소드(method)

  • car.start();
  • car.brake();

4. 인스턴스(instance)

  • 내 차(myCar) : 설계도에 의해 생산된 차량
  • 친구 차(friendCar) : 설계도에 의해 생산된 또 다른 차량

자동차 인스턴스는 모두 위와 같은 필드와 메소드를 가지게 된다
하지만 각 인스턴스마다 가지고 있는 프로퍼티의 값은 전부 다르게 입력 될 수 있다.

클래스 선언 및 생성

클래스를 선언하고 클래스는 사용자가 직접 생성해야 된다.

  • 이때 a 에는 main 함수에서 지정한 a.a의 값인 10이 대입된다.
  • 마찬가지로 b와 c에도 main 함수에서 지정한 값이 대입된다.

심화


오버로딩과 오버라이딩

오버로딩(overloading)

오버로딩은 같은 클래스 내부에서 메소드를 확장하기 위한 개념이다.

오버로딩 조건

  • 메소드의 이름이 일치해야 함.
  • 메소드 매개변수의 개수 또는 타입이 달라야 함(개수가 같다면 타입, 타입이 같다면 개수를 다르게 해야함)
  • 메소드의 retrun 타입이 달라야함.

Test라는 클래스 내부에 3개의 메소드의 이름을 똑같이하고 타입을 다르게 하면 정상적으로 출력이 된다.

오버라이딩(overriding)

부모 클래스에서 물려받은 메소드를 변형해서 사용하고 싶다면 오버라이딩을 사용하여 자유롭게 기능을 추가 또는 재정의 할 수 있다.

오버라이딩 조건

  • 메소드의 이름이 일치해야 함
  • 메소드 매개변수의 개수, 순서 그리고 데이터 타입이 일치해야 함
  • 메소드의 return 타입이 일치해야함.

위 조건이 충족되지 않으면 오버라이딩이 성립될 수 없다.

결론

오버라이딩(overriding)과 오버로딩(overloading)은 메소드(기능)의 재정의 또는 확장을 위한 개념이다. 다만 어디에서 어떤 용도로 사용 하느냐의 차이다.

profile
이해해버려라!

0개의 댓글