매일 조금씩

11/10 - Java (2) : 배열, 객체지향, 클래스, 메소드, this, static 본문

빅데이터 플랫폼 구축을 위한 자바 개발자 양성과정

11/10 - Java (2) : 배열, 객체지향, 클래스, 메소드, this, static

mezo 2020. 11. 10. 17:41
728x90
반응형

 

복습 & 개념정리

* 프로그램 언어 개론 

        왜 Java?        → 특성들을 알고 있어야 한다.

 

* 설치와 환경설정

        1. window

        2. linux / unix 에서도 할줄 알아야 한다. 

 

* Java 종류

        Java SE / EE    → 차이점 

 

* Java 실행환경 → 그림으로 알아두는게 좋다.

        JDK (개발자)

        JRE / JVM (사용자)

 

 

Java

  • 자료

           자료형

                      기본형 - 정수형 / 실수형 / 진리형 / 문자형

                      객체형(X)

                                * String

                     변수 / 상수

                                          자료형 변수명;

                                          final 자료형 상수명;           // constant

                     형변환(자동, 강제)

                     연산자 - 자료형(산술) char + int 연산

 

  • 제어

           조건 - if / else

           반복 - for

           기타

 

 

 

 

 

 


 

 

 

 

 

 

1.  배열

 


 

▷p149

 

* 특징 in java

배열은 같은 타입의 데이터만 저장가능

한번 생성된 배열은 길이를 늘리거나 줄일 수 없음

 

 

1-1. 배열 생성 / 선언 / 초기화

-> arr1을 호출했을 때

     Java : 배열 arr1의 데이터가 저장된 주소 값을 리턴(arr1[0]의 주소)

     Javascript : 배열 arr1의 데이터를 리턴 ex) [0,1,2,3]

 

 

  • 배열은 데이터의 주소값을 담는다.

 

 

  • 선언, 생성, 초기화 동시에 하기

 

 

 

 

  • 예외, 향상된 for 문

 

          * exception(예외) : 컴파일에선 에러가 안나지만 실행시 발생 할 수 있는 에러

          * 향상된 for문 : ▷p169

 

 

 

  • 기본 자료형과 참조 자료형의 차이

 

 

 

 

 

 

1-2. new 연산자로 배열 생성

▷p155

값을 가지고 있진 않지만 향후 값들을 저장할 배열을 미리 만들고 싶을 때

타입[] 변수 = new 타입[길이];

 

int 는 0 , String은 null로 자동 초기화

 

 

 


< C++ 배열과의 비교 >

 

▶ C++ 동적할당 생성, 선언 :  int* arr = new int[length];

                                        int* arr = new int[length]();  // 이렇게하면 0으로 초기화됨 

 

▶ 자바 동적할당 생성, 선언 :  int[] arr = new int[length];   // 자동으로 모두 0으로 초기화됨

                                        String[] names = new String[lentgh];  // 자동으로 모두 null으로 초기화됨

 

    => 자바 역시 동적할당에 new가 쓰이지만 정적할당에선 new가 생략된 형태이다. 

         따라서 자바는 정적, 동적 모두 new를 쓰는 같은 형태이지만, 생략 유무의 차이다.

 


 

1-3. 다차원 배열

▷p162

 

 

arr1의 값은 arr1[0]의 주소값이고

 

arr1[0]의 값은 arr[0][0]의 주소값

arr1[1]의 값은 arr[1][0]의 주소값

arr1[2]의 값은 arr[2][0]의 주소값

 

   =>   arr1.length는 3, arr1[0].length는 2가 나오는 이유!

 

 

 

 

 

 

 

 

1-4. 다차원 가변 배열(new 사용)

 

 

 

 

 

 

 

 

 

 2. 객체지향 프로그래밍 

▷p186

* 특징

  1. 캡슐화
  2. 상속
  3. 다형성
  4. 추상화

 

 

자동차 -> 프로그램

자동차 타입의 데이터 타입(설계)

 

(사물)       

아반떼                         

소나타                          

그랜저

         - 공통적 특성 :  자동차  - (코딩) -  class - 변수(초기화) - 인스턴스

                            (정의)                (자료형)

                 속성                                멤버변수

                 기능                                메서드

 

 

 

객체 모델링

공통적 특성을 뽑는 행위 - abstraction(추상(출)화)

 

 

 

 

 

 

2-1. 클래스 선언

 

 

 Student s2 = new Student(); 

이렇게 객체를 선언하는데 객체배열과 동일하게 참조 변수다.

 

Student s3 = s1;

이렇게 s3을 선언하면 값을 복사하는 것이 아닌 주소(참조)를 복사하는 것이 된다.

s1, s3의 name 값이 같이 바뀜 (같은 곳을 가리키고 있음)

 

 

 

 

클래스 파일은 어떻게 될까?

하나의 파일 안에는 클래스 하나가 있는게 원칙이지만

하나의 파일안에 두개의 클래스를 정의하면 public은 하나의 클래스에만 쓸수 있고

파일명 또한 public인 클래스명으로 해야한다.

자동으로 클래스파일이 별도로 만들어져서 클래스파일이 두개인것을 확인 가능하다.

 

 

 

 

 

 

 

 

 

2-2. 필드 (멤버 변수)

▷p198

 

 

 

 

 

 

 

 

 

2-3. 메소드 선언

 

 

 

 

            ▶ 단을 입력받아 구구단 출력하기

 

 

 

 

2-4. 메소드 특징

 

▷p230

1) 메소드 오버로딩(overloading)

  • 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것.
  • 메소드 오버로딩의 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야한다.  

메소드 오버로딩

 

 

메소드 오버로딩 적용

 

 

 

 

2) 가변 인자 ( ... )

  • 오버로딩과 충돌하므로 구분해서 써야한다.
  • 오버로딩은 각각의 함수를 다르게 정의하지만, 이건 ...을 활용한 가변인자를 쓰는 함수 하나를 사용한다.
  • ...은 가변인자를 뜻하며, 가변인자는 배열이다. (length가 오면 배열이다.)

 

 

            ▶ 여러개의 단을 입력받아 구구단 출력하기

 

 

 

 

 

2-5. 인스턴스 멤버와 this

▷p233

 

* 전역변수 : 클래스 바로 밑에 선언되는 변수. 멤버변수이다. 자동 초기화 된다.

* 지역변수 : 클래스 내의 메소드 안에서 선언되는 변수. 초기화를 해야 사용이 가능하다.

 

전역변수 = 멤버변수 

 

같은이름의 변수가 전역변수와 지역변수가 모두 선언이 되어 있으면

클래스내의 메소드에서 가르키는 변수의 우선순위는

지역변수 → 전역변수이다. (가까운것 먼저)

에러는 나지 않는다. 

 

 this 

  • 자기 자신 (클래스로 정의된)객체를 가리키는 것
  • 내부에서 내가 나를 참조하고 싶을 때 쓴다.
  • 밖에서 참조할 땐 그냥 그 객체 변수명을 사용하면 됨.

this 예제 1
this 예제 2

 

바로 위 코드에서 전역변수와 지역변수명이 일치하는 경우가 없기 때문에

this는 생략이 가능하지만 되도록이면 명확하게 써주는 것이 좋다.

 

 

 

 

 

 

2-6. 정적 멤버와 static (클래스 멤버)     - 메소드도 마찬가지

▷p236

 

멤버 변수(필드)에는 두가지가 있다고 볼 수 있다.

1. instance 필드

2. static(클래스, 정적) 필드    - main함수가 존재하는 클래스의 필드

 

정적 멤버가 멤버변수 즉 필드에 정의되어 있더라도 객체마다 차이가 없기 때문에

객체명이 아닌 클래스명으로 접근이 가능하다. 

static 이라는 개념이 인스턴스화 되기전의 개념이여서 static 안에서 this를 사용할 수 없다.

 

특징

  • static은 인스턴스화(클래스로 객체를 찍어내기) 전의 개념이기 때문에
  • '객체명.static명'과 '클래스명.static명'으로도 접근 가능
  • static 내에서 전역변수(멤버변수)를 부르는 것은 불가능
  • static 내에서 static을 부르는 것은 가능
  • static은 main함수가 있는 public 클래스에서 main함수와 함께 정의되는 것으로 보면 편하다.

728x90
반응형