JAVA(배열, 클래스와 객체)

Hyeon_Su_Lee·2021년 12월 29일
0
post-custom-banner

요약

  • 배열
  • 객체지향 프로그래밍


배열

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 많은 양의 값(데이터)를 다룰 때 유용
  • 배열의 각 요소는 서로 연속적
  • 타입 또는 변수이름 뒤에 대괄호[]를 붙여서 배열을 선언
  • 배열의 인덱스 번호는 0부터 시작
type[] 변수이름;
int[] score;
String[] name;

type 변수이름[];
int score[];
String name[];

배열의 초기화

1.
int[] score = new int[5];
score[0] = 100;
score[1] = 90;
score[2] = 80;
score[3] = 70;
score[4] = 60;

2. int[] score = {100, 90, 80, 70, 60};
3. int[] score = new int[]{100, 90, 80, 70, 60};

예제

거스름돈에 동전의 단위마다 몇개의 동전이 필요한지 출력
ex) 거스름돈:2860원 / 1000원:2개 / 500원:1개 / 100원:3개 / 50원:1개 / 10원:1개

int[] changeMny = { 1000, 500, 100, 50, 10 };
int money = 2860;
System.out.print("거스름돈 : " + money + "원");
for (int i = 0; i <= changeMny.length - 1; i++) {
    System.out.print(" / " + changeMny[i] + "원:" + money / changeMny[i] + "개");
    money %= changeMny[i];
}
int[] changeMny = { 1000, 500, 100, 50, 10 };

우선 거슬러 줄 돈의 단위들을 배열에 넣어준다.

for (int i = 0; i <= changeMny.length - 1; i++) {
    System.out.print(" / " + changeMny[i] + "원:" + money / changeMny[i] + "개");
    money %= changeMny[i];
}

배열안의 값의 개수 만큼 for문을 돌려주고, 한 단위의 계산이 끝날때마다 거스름돈과 계산한 단위의 돈을 모듈러 연한 해주고 나온 값을 다시 거스름돈에 넣어준다.

결과


예제2

1~5 사이의 랜덤한 값이 10개 저장된 배열에서 중복된 값이 제거된 배열을 만들어주세요.
ex)[1,3,3,2,1,1,4,5,5,1,3] -> [1,3,2,4,5]

int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
    arr[i] = (int) (Math.random() * 5 + 1);
}

int count = 0;

for (int i = 1; i < arr.length; i++) {
    for (int j = i - 1; j >= 0; j--) {
        if (arr[i] == arr[j]) {
            count++;
            break;
        }
    }
}
int[] changeArr = new int[arr.length - count];
changeArr[0] = arr[0];
count = 1;
for (int i = 1; i < arr.length; i++) {
    boolean check = true;
    for (int j = i - 1; j >= 0; j--) {
        if (arr[i] == arr[j]) {
            check = false;
            break;
        }
    }
    if (check) {
        changeArr[count] = arr[i];
        count++;
    }
}
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(changeArr));
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
    arr[i] = (int) (Math.random() * 5 + 1);
}

랜덤한 1~5까지의 수를 10개를 뽑아서 배열에 넣어주는 작업이다.

int count = 0;
for (int i = 1; i < arr.length; i++) {
    for (int j = i - 1; j >= 0; j--) {
        if (arr[i] == arr[j]) {
            count++;
            break;
        }
    }
}

배열 전체 값중에서 중복된 값이 얼마나 있는지 확인하는 작업이다.

int[] changeArr = new int[arr.length - count];
changeArr[0] = arr[0];

원래있던 배열의 길이에서 중복된 값의 개수만큼 빼준 길이의 새로운 배열을 하나 생성한 후 원래배열의 첫 번째값은 비교할 대상이 자신 밖에 없기 때문에 우선 먼저 넣어준다.

count = 1;
for (int i = 1; i < arr.length; i++) {
    boolean check = true;
    for (int j = i - 1; j >= 0; j--) {
        if (arr[i] == arr[j]) {
            check = false;
            break;
        }
    }
    if (check) {
        changeArr[count] = arr[i];
        count++;
    }
}

안쪽의 for문으로 진입 후 원래의 배열의 두 번째 숫자부터 중복된 값이 있나 검증과정을 거친다. 만약 중복된 값이 있을 시 check값은 false가 되고 해당 숫자의 검증은 즉시 끝이난다. 그리고 해당 숫자를 새로만든 배열에 넣어주는 과정은 생략하고, 다음 숫자의 검증으로 넘어가며, check의 값은 다시 true로 초기화 된다.

if (check) {
    changeArr[count] = arr[i];
    count++;
}

중복된 값이 없을 때에만 check가 true를 유지하게 되고 마지막에 오는 해당 if문에 접근할 수 있게 된다.

결과


ArrayList 클래스

  • 배열과 같은 기능의 클래스
  • 일반 배열보다 활용할 수 있는 메서드가 많고 활용도가 높다.

생성

import java.util.ArrayList;

ArrayList<datatype> integers1 = new ArrayList<datatype>();
ArrayList<datatype> integers2 = new ArrayList<>();
ArrayList<datatype> integers3 = new ArrayList<>(10);

메서드

  • array.add(value) : 값 추가
  • array.add(index, value) : 지정한 인덱스에 값 추가(원래 있던 값은 한 칸씩 밀려남)
  • array.set(index, value) : 값 변경
  • array.get(index) : 입력한 인덱스 값 출력
  • array.size() : 배열 크기 출력
  • array.remove(index/value) : 인덱스 또는 입력한 값 제거
  • array.clear() : 값 전체 제거
  • array.contains(value) : 값이 배열에 존재하는지 확인. 있으면 true, 없으면 false 반환


ArrayList를 활용한 일반 배열 예제2

import java.util.ArrayList;

ArrayList<Integer> arr = new ArrayList<Integer>();
int arrSize = 10;
for (int i = 0; i < arrSize; i++) {
    arr.add((int) (Math.random() * 5 + 1));
}
System.out.println(arr);
for (int i = 1; i < arrSize; i++) {
    for (int j = i - 1; j >= 0; j--) {
        if (arr.get(i) == arr.get(j)) {
            arr.remove(i);
            i--;
            arrSize--;
            break;
        }
    }
}
System.out.println(arr);

그냥 배열로 문제를 풀때는 for문을 돌려 중복된 개수 구하고 그 개수 만큼 빼준 길이의 배열을 하나 더 생성 후 다시 for문을 돌려 새로 생성한 배열에 넣어주는 과정을 거쳤지만 ArrayList를 활용해서 배열 1개, 2중 for문 1개로 해결한 것을 볼 수 있다.

결과



객체지향 프로그래밍

클래스(Class)

  • 객체를 정의해 놓은 것이다.
  • 객체를 생성하는데 사용된다.

객체(Object)

  • 실제로 존재하는 것. 사물 또는 개념
  • 객체의 속성과 기능에따라 다름
  • 속성과 기능의 집합

ex)

클래스객체
제품설계도제품
TV설계도TV
붕어빵기계붕어빵

객체의 구성요소

  • 속성 - 클래스 변수, 크기, 길이, 높이, 색상, 볼륨 등 구성 요소
  • 기능 - 메서드, 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기 등 행동 및 기능

형식

// 파일명은 해당클래스 이름과 같아야 한다.
// 클래스 이름은 첫 글자를 항상 대문자로 해야 한다.
// 하나의 파일에 여러가지 클래스가 있다면 하나의 클래스에만 public을 써야한다.
public class ClassName { 
    int 변수1;
    String 변수2;
    void 메서드(){
        code...;
    }
    void 기능(){
    	code...;
    }
}

class ClassName2{
	code...;
}
public class Main{
    public static void main(String[] args) {
        ClassName classTest = new ClassName(); // 인스턴스화
        classTest.변수1 = value;
        classTest.메서드();
        classTest.기능();
    }

ex) TV

public class TV {
    String color;
    boolean power;
    int channel = 7;
    void power() {
    	power = !power;
    }
    void channelUp() {
    	++channel;
    }
    void channelDown() {
    	--channel;
    }
}
public class TvTest {
    public static void main(String[] args) {
        TV t = new TV();  // TV클래스를 인스턴스화 하였다.(TV를 한개 생성한 것과 같다)
        t.channelDown();
        System.out.println("현재 채널은 " + t.channel + " 입니다.");
    }
}

결과 : 현재 채널은 6 입니다.

public class TV {
    String color;
    boolean power;
    int channel;
    void power() {
    	power = !power;
    }
    void channelUp() {
    	++channel;
    }
    void channelDown() {
    	--channel;
    }
}
String color;
boolean power;
int channel;

이 3가지 클래스 변수는 TV제품의 속성이다.
TV의 색상, 전원의 상태, 채널의 상태이다.

void power() {
	power = !power;
}
void channelUp() {
	++channel;
}
void channelDown() {
	--channel;
}

이 3가지 메서드는 TV의 기능이다.
power()메서드는 전원의 On/Off 기능이고, channelUp(), channelDown()은 채널이동 기능 이다.

profile
어제 보다 오늘 더 발전하는 개발자
post-custom-banner

0개의 댓글