Java Study week 2

안성현·2023년 1월 25일
0

Java Study

목록 보기
2/2

6장. 클래스와 객체

객체지향 프로그래밍 언어인 자바는 프로그램을 객체 단위로 구성해 상호 연동시킴으로써 프로그램을 실행함

클래스명은 대문자로 쓰기로 약속함

  • 클래스 구성요소

외부 구성요소

1. 패키지 : 반드시 주석제외 첫 줄에 위치해야함
  if) 디폴트 패키지를 사용하면 생략
    
2. 임포트 : 다른 패키지의 클래스를 사용하고자 할 때 포함

3. 외부 클래스 : 1개의 .java파일에 여러 개의 클래스 포함 가능
   ( 단, 외부 클래스에는 public 키워드 사용 X )

내부 구성 요소

1. 필드 : 클래스의 특징(속성)을 나타내는 변수
    
    ex) int age = 20; 
    
2. 메서드 : 클래스가 지니고 있는 기능(함수)
    
    ex) void working() {};
    
3. 생성자 : 클래스의 객체를 생성하는 역할

4. 이너 클래스 : 클래스의 내부에도 클래스가 포함될 수 있음

필드, 메서드, 이너 클래스를 ‘클래스의 멤버’ 라고함

클래스의 생성자로 객체를 만드는 과정 → 인스턴스화

인스턴스화로 만들어진 객체 → 인스턴스

  • 객체 생성하기

    	클래스명 참조변수명 = new 생성자();
    
    	ex) A a = new A();

객체생성코드

자동차 car1 = new 자동차();

자동차 car2 = new 자동차();

*클래스 내용*

class 자동차 {

String color;

void drive() {}}

  • 객체 활용하기

→ 포인트 연산자( . ) 사용하기

A a = new A();

System.out.println(a.m); // 필드 활용

a.print(); // 메서드 활용

7장. 클래스 내부 구성요소

  • 필드와 지역 변수의 구분

    필드 → 클래스에 포함된 변수, 힙 메모리에 생성됨

    지역 변수 → 메서드에 포함된 변수, 스택 메모리에 생성됨

    * 힙 메모리 객체 내 저장되는 필드는 객체가 사라지지 않는 한 절대 삭제되지 않음

  • 메서드의 정의

    	자바제어자 리턴타입 메서드명(입력매개변수) {};
public static int sum(int a, int b) {

// 메서드 내용

}

  • 리턴 타입이 void가 아닐 때 메서드 안엔 반드시 ‘return 리턴값’ 의 코드가 있어야함

void 메서드 안에 return의 의미는 ‘메서드를 종료하라’ 라는 의미임

  • 메서드 호출하기

클래스 외부에서 호출

→ 객체 생성 후 입력 매개변수에 해당하는 값을 통해 리턴값을 반환

클래스 내부에서 호출

→ 메서드끼리 객체를 생성하지 않고 서로 호출 가능

* 단, 메서드 앞에 static이 붙어있다면 static이 붙은 필드 or 메서드만 호출 가능


*입력 매개변수에는 기본 자료형 이외에도 배열 또한 가능*

이 때, new 키워드를 사용해야 오류 발생 X

public static void main(String[] args) {

int[] a=new int[] {1,2,3};

printArray(a);

printArray(new int[] {1,2,3});                // printArray({1,2,3}) 오류

}

  • 기본 or 참조 자료형 입력매개변수 차이

case 1. 기본 자료형 → 기본 자료형이 입력매개변수로 전달되면 전달받은 메서드는 값을 복사함

case 2. 참조 자료형 → 참조 자료형이 입력매개변수로 넘겨질 때 실체 객체 전달 X , 객체의 위칫값이 전달됨

  • 오버로딩된 메서드

메서드 시그니처

: 메서드명과 입력매개변수의 자료형

→ 메서드를 구분하는 기준 역할 , JVM은 메서드 시그니처가 다르면 메서드명이 동일해도 다른 메서드로 인식함

메서드 오버로딩

: 입력매개변수의 개수나 자료형이 다른 여러개의 동일한 이름을 지닌 메서드를 같은 공간에 정의하는 것

리턴 타입 메서드명 (자료형 변수명, …) {}
int sum(int a, int b) {

return 3;

}

  • 가변 길이 배열 입력매개변수 메서드
리턴 타입 메서드명 ( 자료형… 참조 변수명) {}
method1(int… values) // 개수와 상관없이 정수 입력 받기

method2(String… values) // 개수와 상관없이 문자열 입력 받기

오버로딩만 사용했다면 입력매개변수를 하나하나 적어야했겠지만, 가변 길이 배열 입력매개변수를 사용함으로써 모든 메서드 호출에 대응 가능

  • 생성자의 특징
  1. 반드시 클래스명과 동일한 이름으로 지어야함

  2. 리턴 타입 X

    클래스명 (입력매개변수(생략O)) { }

생성자가 없는 클래스는 컴파일러가 기본 생성자를 추가해줌

  • 기본 생성자 : 입력매개변수가 없는 생성자

생성자 중괄호 안은 생성된 이후 할 일이 작성됨

일반적으로 여기에서 필드를 초기화함

  • 내부 객체 참조 변수명인 this 키워드

모든 메서드는 자신이 포함된 클래스의 객체를 가르키는 this라는 참조 변수가 있음

→ 클래스 내부 객체 공유시 원래는 this를 붙여줘야 하지만 없어도 컴파일러가 자동으로 붙여줌


*this를 명시적으로 붙여줘야 할 경우*

→ 필드와 지역 변수를 모두 사용할 수 있고 이름이 같을 때 지역 변수로 인식

class A {

int m;

int n;

	void init(int m,int n) {

	this.m=m;

	필드   지역 변수

	this.n=n;
	필드   지역 변수

	}

}
  • 자바에서 제공하는 API에는 메서드의 지역 변수명이 필드명과 동일하게 구성돼 있다. 따라서 this.m=m과 같은 표현은 자주 보임

  • 클래스 내 다른 생성자를 호출하는 this() 메서드

자신이 속한 클래스 내부의 다른 생성자를 호출하는 명령

 클래스명이 A라면 this()는 A() 생성자를 호출하는 것
 this(3)은 A(3) 생성자를 호출하라는 말
 

this() 메서드 특징

  1. 생성자의 내부에서만 사용할 수 있음

→ 생성자의 내부에서만 또 다른 생성자를 호출할 수 있음

( 메서드에서는 this() 메서드 사용 불가능 )

  1. 생성자의 첫 줄에 위치해야함

* 필드가 많아질수록 생성자의 중복을 제거하기 위해 this() 메서드가 필요하게 됨

class A { 

int m1, m2, m3, m4;

	A() {

	m1=1; 

	m2=2;

	m3=3;

	m4=4;
	
	}
    

	A(int a) {

	this();

	m1=a;

	}
    

	A(int a, int b) {

	this(a);

	m2=b;

	}

}

8장. 클래스 외부 구성요소

  • 패키지

: 비슷한 목적으로 생성된 클래스 파일을 한곳에 모아 둔 폴더

1개의 프로젝트에 1개, 여러 개, 0개를 생성해도 됨

패키지의 장점 → 클래스가 저장되는 공간이 분리돼 클래스명의 충돌을 방지할 수 있음

  • 임포트

: 다른 패키지 내의 클래스를 사용하기 위한 문법 요소

* 패키지 구문의 다음 줄에 위치함


  1. 클래스의 풀네임 사용

    풀네임 → 패키지명.클래스명

    ex) Java패키지의 A 클래스 객체를 생성하려고 할 때

     → A a = new A() (X)
    
      → Java.A a = new Java.A() (O)

    ** 이때 다른 패키지의 클래스인 A 앞엔 public이 붙어있어야함

  2. 임포트 사용

    import 패키지명.클래스명

     import Java.A;

    * 패키지 내의 모든 클래스를 임포트하고 싶다면 *를 사용함

    Java.*;

  • 외부 클래스

: public 클래스를 제외한 모든 클래스

public 클래스가 아니면 다른 패키지에서 임포트할 수 없으므로 외부 클래스는 같은 패키지 안에서만 사용 가능

profile
코린이

0개의 댓글