반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

클래스 더 알기(More on Classes)

지금부터는 클래스의 객체의 참조와 점(.) 연산자에 의존하는 좀 더 다양한 측면을 다룬다.

메서드 리턴 값(Returning a Value from a Method)

다음 같은 코드에서 메서드는 리턴한다.

  • 메서드 내에서 모든 구문을 실행 완료 후 (메서드 끝)

  • return구문을 실행했을 때

  • 예외(exception)를 던질 때

셋 중 무엇이든 먼저 실행되면 리턴한다.

메서드 선언 시 리턴 타입을 선언한다. 그리고 메서드 내에서 return구문을 선언에 맞는 타입으로 리턴 값을 구현한다.

리턴할 값이 없다면 void 키워드를 사용한다. void를 사용하면 메서드 내에 return키워드를 사용할 필요가 없다. 제어 구문, 순환 구문 또는 메서드를 중간에 빠져나가야 할 경우엔 void를 사용했더라도 return 구문을 사용할 수 있다. 아래처럼

   return;

하지만 void로 선안하고 return값을 지정해서 메서드 내에서 사용하면 컴파일 오류가 발생한다.

즉 메서드를 선언할 때 리턴 타입을 지정하면 반드시 return 구문을 사용해서 해당 타입의 값을 구현해야 하고 void로 지정한 경우는 값이 있는 return을 사용하면 오류가 난다.

   return 리턴 값;

메서드 선언할 때 사용한 데이터 타입과 실제 메서드 내에서 리턴 값의 타입은 같아야 한다. 다르면 오류가 발생한다.

리턴 타입은 원시 데이터뿐 아니라 참조형(객체 등)도 가능하다.

 

 

this키워드 사용하기(Using the this Keyword)

인스턴스 메서드 또는 생성자에서 this는 현재 객체를 참조하는 것이다. This를 사용해서 인스턴스 메서드나 생성자에서 현재 객체의 어떤 멤버든 참조할 수 있는 것이다.

필드에서 this 사용하기 (Using this with a Field)

this를 사용하는 가장 중요한 이유는 메서드 또는 생성자의 파라미터를 통해 클래스 필드 값에 접근할 수 있기 때문이다.

아래 예제를 확인해 보자.

      public class Point {

           public int x = 0;

           public int y = 0;

           //생성자

           public Point(int a, int b) {

                x = a;

                y = b;

           }

      }

위 예제는 파라미터와 클래스 필드의 이름이 다르다. 하지만 아래와 같이 사용할 수 도 있다.

      public class Point {

           public int x = 0;

           public int y = 0;

           //생성자

           public Point(int x, int y) {

                this.x = x;

                this.y = y;

          }

      }

위 예제를 보면 필드명과 생성자의 파라미터 명이 같다. 그래서 생성자 내에서 x=x라고 하면 문제가 발생한다. 원하는 건 생성자로 입력 받은 파라미터의 값을 클래스 필드에 할당하는 것이다. 그래서 this를 사용해서 현재 클래스의 필드를 지정해 주는 것이다. This는 이 지금 클래스라고 이해하면 된다.

생성자로 this 사용하기 (Using this with a Constructor)

같은 클래스에서 생성자 내에서 다른 생성자를 호출할 때 this를 사용할 수 있다. 이렇게 보면 this는 그냥 지금의 클래스를 지칭하는 것이다. 오버라이딩 된 여러 개의 생성자 중 호출하고 싶은 생성자가 있다면 this(파리미터들)로 식별해서 호출하면 된다.

      public class Test {

           private int x, y;

           private int a, b;

          //기본 생성자

          public Test() {

               this(0,0,0,0); //오버로딩 된 파라미터가 4개인 생성자 호출

          }

          public Test(int a, int b) {

               this(0,0,a,b); //오버로딩 된 파라미터가 4개인 생성자 호출하는 데 파라미터 2개는 받아서 넘김.

         } 

         public Test(int x, int y, int a, int b) {

              this.x = x;

              this.y = y;

              this.a = a;

              this.b = b;

         }

      }

위 클래스는 여러 개의 생성자를 가지고 있다. 각 생성자는 각각 Test 클래스의 맴버 변수들 전부 또는 일부를 초기화한다.

다른 생성자를 호출하는 게 있다면 반드시 생성자 내의 첫 번째 줄에 있어야 한다.

 

반응형
반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

2019/06/15 - [Software/Java] - [Java_Tutorial]8강-자바 코딩, 원시데이터 타입 [Primitive Data Types, 자바 프로그래밍 기초 , 자바 튜토리얼]

앞 포스팅에서 원시 데이터 타입(Primitive Data Types)에 대해 알아보았다. 코어 프로그램이 아닌 일반 코딩 시에는 int, long, double, String 형을 가장 자주 사용한다.

이번 포스팅은 배열(Arrays)에 대해 알아본다. 배열 또한 자주 쓰는 객체이다. 그럼 시작해 본다.

자바의 배열(Array)은 고정된 숫자로 길이를 고정해서 한 가지 타입의 값들을 담고 있는 컨테이너 객체이다. 무엇을 담을 수 있는 객체라는 것이다. 배열을 선언할 때 배열의 길이를 설정한다. 주의할 점은 배열 객체를 생성하고 나면 길이는 고정된다.

5개 엘리먼트 배열

5개 요소(element, 엘리먼트)로 구성된 (인덱스, index) 배열의 구조이다. 인덱스(index)0부터 시작하고 순차적으로 늘어난다. 0, 1, 2, 3, 4.. 네번째 값을 지정할 땐 index3을 사용한다. 즉 인덱스 3의 위치는 4번째 값을 가지고 있는 것이다. 배열 내 각각의 값들은 엘리먼트(element)라고 부른다. 그 엘리먼트들은 숫자로 된 인덱스와 매칭 된다. 그럼 실제 배열을 사용한 코딩을 해본다. Integerarray(배열)을 만들 것이다.

주의할 점은 new int[3]으로 생성한다고 인덱스(index)3까지 할당되는 게 아니다. [ ]의 숫자는 사이즈이므로 인덱스(index)0,1,2까지만 할당된다.

실전 프로그래밍에서는 이렇게 하나씩 넣을 수도 있지만 보통은 순환문(loop)을 사용할 것이다. 순환문은 (for, while, do-while)로 구성되어 있고 추후 사용법에 대해 포스팅하겠다.

 

 

배열을 선언하는 것은 2개의 컴포넌트가 필요한데 배열의 타입과 배열의 이름이 필요하다. 타입은 type[] 형태로 사용한다. 배열의 이름은 원하는 대로 만들면 된다. 다양한 타입의 배열을 선언해서 사용할 수 있고 대괄호 [ ]는 배열형 뒤나 배 열명 뒤에 사용할 수 있다.

long[] longArray; 또는 long longArray[];

배열의 값을 할당하는 방법은 위 예제 소스처럼 각 인덱스를 지정해서 할당할 수 있다.

int intArray[0] = 100;

또는 다음 방식으로 일괄 등록할 수도 있다.

int[] intArray = {1, 2, 3};

중괄호{ } 사이에 인덱스 순서대로 값을 넣으면 된다. 데이터베이스나 다른 데이터에서 값을 추출해서 배열에 할당해야 되는 경우는 첫 번째 방식으로 사용하면 되고 선언부터 고정된 상수값을 지정하려면 두 번째 방식이 유용하다.

또 하나 이중 배열도 이용할 수 있다. 사용 방식은 대괄호를 두 번 연속 사용하면 된다. 첫 번째 대괄호[ ]1차 순환 배열이고 두 번째 대괄호[ ]1차의 각 엘리먼트 별로 순환될 배열이다. 이중 배열도 실전에서 자주 사용한다. 두 개의 목록이 있을 경우 중복되는 값을 찾을 때 유용하다.

우선 예제를 살펴본다.

결괏값 room[0][1]은 첫 번째 대괄호인 [0]은 1층, 2층, 3층 배열을 지칭하는 것이고 두 번째 [1]은 1층,2층,3층 중 인덱스 12층이 된다. 출력은 “2 :”으로 나온다. 다음 room[1][1]을 보면 첫 번째 대괄호인 [1]은 두 번째 1, 2호 배열을 지칭하고 두 번째 [1]은 1호, 2호 중 인덱스 12호를 출력한다. 최종 결괏값은 “2 :2가 된다.

지금까지 배열의 개념, 생성과 사용에 대해 알아보았다. 그럼 배열에 대해 좀 더 다양한 기능들을 살펴본다.

배열을 복사해서 다른 배열을 만들 수 있다. 배열의 일부 값을 다른 배열에 복사해서 생성 및 사용할 수 있다. 배열을 복사할 수 있는 메서드는 System클래스의 arraycopy이다.

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

우선 srcdest 2개의 Object 파라메터(parameter)가 있는데 첫 번째 scr가 복사해 올 소스 배열이고 두 번째 dest 가 복사해 온 데이터로 새로 만들 배열을 나타낸다. Srcsource(원천)의 약자이고 destdestination(도착지)의 약자이다. 다음 int srcPost 파라메터는 src 배열에서 복사를 시작할 index위치를 의미하고 두 번째 int destPost는 새로 만들 배열에서 복사를 시작할 위치의 index를 의미하며 마지막 int length는 시작점에서 몇 개를 복사할 것인지 의미한다.

아래 예제를 통해 테스트를 해보자.

테스트 결과를 보면 index [0,1,5]는 값이 0이다. Int 배열은 기본값으로 0이 자동 설정됨을 알 수 있다. 지정한 대로 잘 복사되었다.

더 다양한 배열의 조작법에 대해 알아보자. 먼저 봤던 System.arraycopy 메서드는 순환문을 사용하지 않고 System.arraycopy를 이용해서 배열 전체 또는 부분을 복사해서 다른 배열에 값을 할당할 수 있다. 좀 더 편하게 배열을 다룰 수 있도록 Java SE 에서는 java.util.Arrays 클래스에 다양한 조작 기능을 제공한다. copyOfRange 메서드가 한 예인데 다음 예제를 통해 확인해 본다.

java.util.Arrays.copyOfRange(소스 배열, 소스 배열의 시작 index[포함], 소스 배열의 끝 index[미포함]);

해당 메서드는 System 클래스가 아닌 java.util.Arrays 클래스의 메서드로 소스 배열만 필요하고 목적 배열은 필요하지 않는다. 시작 index를 포함한 글자부터 끝 index는 포함하지 않은 바로 앞까지의 글자를 복사해 온다. 단 한 줄로 쉽게 배열을 복사해서 사용할 수 있다.

더 많은 기능은 검색 기능, 비교 기능, 채우기 기능, sort 기능, 나누기 기능 등 이 있다. 나중에 팁 포스팅에서 상세히 다루도록 하겠다.

2019/06/19 - [Software/Java] - [Java_Tutorial]10강-자바 코딩, 연산자[Operators, 자바 프로그래밍 기초 , 자바 튜토리얼]

 

[Java_Tutorial]10강-자바 코딩, 연산자[Operators, 자바 프로그래밍 기초 , 자바 튜토리얼]

[Oracle의 Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.] [Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼] 앞 포스팅에서..

tiboy.tistory.com

다음은 자바 프로그래밍(java programming)에서 오퍼레이터(조작)에 대해 알아본다.

반응형