Java/Java 기본 45

객체 배열

객체 배열 지금까지는 자바 기본 타입의 배열만 다루었다. 그러나 사실, 자바에서는 객체가 원소인 객체 배열도 만들 수 있다. 객체 배열이란 객체에 대한 레퍼런스를 원소로 갖는 배열이다. 이전 글에서 만들었었던 Person 클래스로 만든 Person 타입 객체로 이루어진 배열로 예시를 들어보도록 하자. i.e.Person[] pa; //객체 배열 레퍼런스 선언pa = new Person[20]; //객체 배열 생성 for (int i = 0; i < pa.length; i++) {pa[i] = new Person(); //객체 배열에 원소로 들어갈 객체 생성pa[i].age = 30 + i; //객체의 필드에 접근 (객체 배열의 경우 배열의 인덱스를 이용해서 원하는 객체에 접근 가능)} 객체 배열은 이전에..

Java/Java 기본 2018.06.22

클래스 선언과 활용

클래스 선언과 활용 1. 클래스와 객체 객체 지향 프로그래밍에서는 실제 세상의 물체들을 객체로 모델링한다고 하였다. 그렇다면 클래스는 객체와 어떻게 다른가? 클래스는 객체를 만들기 위한 설계도라고 보면 된다. 즉, 객체 지향 프로그래밍은 인터넷 세계 상에 자판기나 달력, 전화기등 어떠한 일을 하기 위해서 우리를 도와주는 객체를 만들고, 그 객체를 사용해서 주어진 임무를 완수하는 방식이라고 보면 된다. 이때, 이 객체들을 만들기 위해서는 설계도가 필요할 것이다. 예를 들어, 볼펜의 설계도를 통해서 철수와 영희에게 각각 볼펜을 만들어 준다고 생각해 보자. 같은 설계도를 통해서 만들어졌으니 두 볼펜의 종류는 같겠지만, 철수의 볼펜과 영희의 볼펜은 같은 볼펜이 아니다. 두 볼펜은 엄연하게 다른 객체이다. 그렇지..

Java/Java 기본 2018.06.22

객체 지향과 자바

객체 지향과 자바 1. 객체 지향 언어의 목적 객체 지향 언어 (Object Oriented Language)가 출현할 당시 가장 범용으로 사용되던 언어는 절차 지향 언어 (Structured Procedural Programming Language) 였다. 객체 지향 언어는 절차 지향 언어가 가진 단점을 보완하고 다음의 목적을 달성하기 위해 탄생하였다. 1) 소프트웨어의 생산성 향상컴퓨터 산업이 발전함에 따라 소프트웨어의 생명 주기(life cycle)가 짧아졌는데, 이는 어떤 제품이 기획되면 짧은 시간 내에 소프트웨어를 만들어야만 했기 때문이다. 객체 지향 언어는 상속, 다형성, 객체, 캡슐화 등 소프트웨어의 재사용을 위한 여러 장치를 내장하고 있다. 객체 지향 소프트웨어를 새로 만드는 경우, 이미 ..

Java/Java 기본 2018.06.21

예외 (Exception)

예외 (Exception) 1. 예외란? 프로그래밍 언어의 문법에 맞지 않게 프로그램을 작성하면 컴파일 오류가 발생한다. 그러므로 실행하기 전에 문법에 맞지 않게 작서오딘 오류는 미리 걸러내어야 한다. 그러나 프로그램 실행 중 계속 변하는 배열의 인덱스가 범위를 벗어나는 것은 컴파일 시점에서 걸러낼 수 없다. 이퍼럼 프로그램 실행 중에 발생하는 런타임 오류(runtime error)는 미리 걸러낼 수가 없어 자바에서는 예외(Exception)라는 것을 사용하여 처리하낟. 예외란 프로그램의 실행 중에 런타임 오류틔 발생을 응용프로그램에게 알리는 행위이다. 예외가 발생하는 몇가지 경우를 나열해보자. 1) 정수를 0으로 나누는 경우2) 배열의 크기보다 큰 인덱스로 배열의 원소를 접근하는 경우3) 파일의 마지막..

Java/Java 기본 2018.06.21

main() 메소드의 인자

main() 메소드의 인자 main() 메소드는 자바에서 응용프로그램이 시작되는 메소드로서 특별한 의미를 가진다. main() 메소드의 원형은 다음과 같다. public static void main(String[] args) {...} 1. main() 메소드의 타입과 특징 1) 자바 응용프로그램 실행은 main() 메소드부터 시작한다. 2) main() 메소드는 public 속성이다.public 속성은 메소드가 다른 모든 클래스에서 호출 가능함을 표시한다. 자바 응용프로그램이 실행을 시작할 때 자바 가상 기계(JVM)에 의해 호출되어야 하므로 public 속성으로 선언 되어야 한다. 3) main() 메소드는 static 속성이다.main() 메소드는 시작할 때부터 JVM에 의해 호출되어야 하므로 프..

Java/Java 기본 2018.06.13

메소드에서 배열 리턴

메소드에서 배열 리턴 메소드에서 배열을 리턴할 수 있다. 이 경우 실제 배열에 대한 레퍼런스가 리턴된다. 메소드가 반환하는 배열의 타입과 배열의 차원은 리턴받는 배열 레퍼런스 변수의 타입과 배열의 차원에 일치하여야 한다. 그리고 메소드에서 리턴하는 배열의 크기는 매번 다를 수가 있으므로 메소드 선언 시 배열의 크기는 정하지 않는다. 다음은 예시를 위해서 만든 makeArray() 메소드의 코드이다. 이 메소드는 int[] 배열을 리턴타입으로 삼는다. int[] makeArray() {int temp[] = new int[4];return temp;} makeArray() 메소드로부터 배열을 리턴받는 코드를 작성을 해보도록 하자. int[] intArray = makeArray(); // 메소드 호출 후 ..

Java/Java 기본 2018.06.12

다차원 배열

다차원 배열 자바에서 여러 차원의 배열을 만들 수 있다. 그러나 일반적으로 3차원 이상의 배열은 잘 사용하지 않는다. 실무 상에서도 일반적으로 2차원 배열까지만 사용한다. 가끔 3차원 배열을 사용하는 경우도 있기는 하지만 워낙 드문 일이고, 그마저도 자바 컬렉션으로 대체하는 경우가 많다. 따라서, 사실상 3차원 배열 이상은 사용할 일이 없다고 생각하면 될 것이다. 자바의 다차원 배열은 독특한 구조를 가지기 때문에 비정방형 배열을 만들 수도 있다. 1. 2차원 배열 - 2차원 배열의 선언과 생성 자바에서 2차원 배열의 레퍼런스 변수 선언은 다음과 같다. int intArray[][];int[] intArray[];int[][] intArray; 위의 3가지 방식들 중에서 아무 방식이나 골라서 사용하면 된다..

Java/Java 기본 2018.06.12

배열의 크기와 인덱스

배열의 크기와 인덱스 다른 언어와 동일하게 자바에서도 배열의 인덱스는 정수만 가능하며 정수형 상수도 사용할 수 있다. 인덱스는 0부터 시작하며 마지막 원소의 인덱스는 (배열의 크기 - 1)이 된다. 예를 들어서 “int intArray = new int[5];” 라는 문장을 통해서 정수형 배열 intArray를 생성하게 되면, 이 배열의 크기는 5가 되고, 인덱스는 0부터 4까지 존재하게 된다. 1. 배열의 크기, length 필드 자바에서는 배열도 하나의 객체처럼 다루어진다. 객체에 대해서 아직 다루지 않았기에 모를 수도 있겠지만, 자바에서 객체는 필드라는 변수를 가질 수 있다. 이 변수는 각 객체마다 고유하게 가지게 되는 특성이라고 생각하면 된다. 객체에 대해서 더 자세한 개념은 이후에 설명하도록 하..

Java/Java 기본 2018.06.12

배열 원소 접근

배열 원소 접근 배열의 원소에 대한 접근은 배열 레퍼런스 변수와 인덱스를 이용한다. 배열 레퍼런스 변수와 [] 사이에 원소의 인덱스를 적어 접근한다. 이때, 원소에 대한 인덱스는 0부터 시작한다. 배열의 원소를 사용하는 예를 들면 다음과 같다. int[] intArray = new int[10];intArray[0] = 5; // 인덱스가 0인 원소에 5를 저장intArray[3] = 6; // 인덱스가 3인 원소에 6을 저장int a = intArray[3]; // 배열로부터 값을 읽음 배열의 원소에 접긍ㄴ하려면 반드시 배열이 생성되어 있는 상태여야 한다. 배열이 생성되어 있지 않는 상태에서 배열에 접근하면 배열이 초기화가 되지 않았다는 컴파일 오류가 발생하거나 실행시간 오류가 발생한다.

Java/Java 기본 2018.06.12

배열의 참조

배열 참조 앞에서 배열의 선언과 생성은 별개임을 설명하였다. 그러므로 생성된 하나의 배열을 다수의 레퍼런스가 참조할 수도 있다. 다음 예시 코드를 통해서 그 개념에 대해서 알아보도록 하자. int oldArray[] = {1, 2, 3, 4, 5};int newArray[] = oldArray;newArray[1] = 3; 위의 이미지를 보게 되면 stack과 heap이라는 글자가 보일 것이다. JVM내에는 지역변수와 같이 메소드 내에서 발생한 데이터를 저장하는 stack이라는 공간과 객체나 배열등의 인스턴스를 저장하는 heap이라는 공간이 있다. 즉, 메소드 내에서 레퍼런스 변수를 선언하게 되면 stack 공간에 레퍼런스 변수가 생기게 된다. 이어서, 배열을 생성하게 되면 heap 공간에 배열 데이터가..

Java/Java 기본 2018.06.11