새소식

Study/Java

[Java] 클래스와 객체

  • -

참고 : 명품 JAVA Programming (개정 4판) 저자 황기태, 김효수 

 

  • 객체 지향 언어의 특성

- 캡슐화(Encapsulation) : 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것 → 외부의 접근으로부터 안전,

클래스라는 캡슐을 사용하고 필드(멤버 변수)와 매서드(멤버 함수)로 구성

 

- 상속(Inheritance) : 상위 객체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계, 자바에서는 자식 클래스가 부모 클래스의 속성을 물려받고 기능을 확장(extens)하는 개념

 

- 다형성(Polymorphism) : 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것 

- 매소드 오버라이딩(Overriding) : 슈퍼 클래스(부모 클래스)에 구현된 매소드를, 서브 클래스(자식 클래스)에서 동일한 이름으로 자신의 특징에 맞게 다시 구현하는 것

- 매소드 오버로딩(Overloading) : 클래스 내에서 이름이 같지만 서로 다르게 동작하는 매소드를 여러 개 만드는 매소드

 

  • 클래스 구성

- class 키워드를 사용하여 선언

- 클래스 구성요소를 멤버라고 부르며, 멤버는 필드(멤버 변수)와 메소드(멤버 함수) 두 가지 종류가 있음

ex)

public class Circle {
int radius; String name;
}
- class 키워드 사용하여 Circle 클래스 선언
- 중괄호 안에 필드와 메소드 모두 작성
- 클래스 외부에 어떤 필드나 메소드 위치 불가
- public : 접근지정자
- 생성자 : 클래스 이름과 동일한 메소

 

  • 객체 생성과 객체 접근
Circle pizza;
pizza = new Circle();

 - new 연산자를 사용하여 객체 생성

- 객체의 멤버 접근할 때는 레퍼런스 변수 뒤에 .연산자를 붙임

 

  • 생성자(constructor)

- 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드

- 생성자의 이름은 클래스 이름과 동일

- 생성자는 여러 개 작성(오버로딩) 가능

- 생성자는 new를 통해 객체를 생성할 때 한 번만 호출

- 생성자에 리턴 타입 불가

- 사용하는 목적은 객체가 생성될 때 필요한 초기 작업을 하기 위함

 

 

  • 기본 생성자(default constructor)

- 매개변수와 실행 코드가 없어 아무 일도 하지 않는 단순 리턴하는 생성자 , 디폴트 생성자라고도 함

- 기본 생성자가 자동으로 생성되는 경우 → 컴파일러에서 자동으로 생성됨

- 기본 생성자가 자동으로 생성되지 않는 경우 → 매개변수를 가진 생성자가 작성되어 있기 때문에, 컴파일러는 기본 생성자를 만들어 주지 않음

 

  • this

- 현재 객체 자신에 대한 레퍼런스

- this 사용하는 이유는 매개변수의 이름은 그 자체로서 코드를 읽는 사람에게 그 용도를 나타내므로 적합한 이름을 붙이는 것이 중요

 

  • this()

- 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용하는 자바 코드

예제 4-5

- this() 사용 시 주의 사항

  1. 반드시 생성자 코드에서만 호출 가능
  2. 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용
  3. 반드시 생성자의 첫 번째 문자가 되어야 함
  • 객체 배열

- 객체에 대한 레퍼런스를 원소로 갖는 배열

예제 4-7

 

  • 메소드 활용

- 메소드 : 클래스의 멤버 함수

- call by value : 호출하는 실인자의 값이 복사되어 매소드의 매개변수에 전달됨

  1. 기본 타입의 값이 전달되는 경우 : 기본 타입(byte, char, short, int, long, float, double, boolean)으로 선언된 경우,
    호출자가 건네는 값이 매개변수에 복사
  2. 객체가 전달되는 경우 : 매개변수가 클래스 타입인 경우, 객체가 아니라 객체의 레퍼런스 값이 전달
  3. 배열이 전달되는 경우 : 배열이 통째로 전달되는 것이 아닌 배열에 대한 레퍼런스만 전달
    ※ 메소드의 매개변수로 객체나 배열을 전달할 때 레퍼런스만 전달하기 때문에 객체나 배열이 통째로 전달되지 않음
    →메소드에서 전달받은 객체의 필드나 배열의 원소값을 변경할 수 있기 때문에 주의!
  • 메소드 오버로딩

- 한 클래스 내에 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 매소드를 중복 작성하는 것

- 메소드 오버로딩 조건

  1. 메소드 이름이 동일
  2. 매개변수의 개수나 타입이 서로 달라야 함
  • 접근 지정자

- 패키지 :  디렉터리 혹은 폴더 같은 개념, 클래스 파일들을 여러 패키지에 분산하여 관리

- 접근 지정자 종류

멤버에 접근하는 클래스 멤버의 접근지정자
private default protected public
같은 패키지의 클래스 X O O O
다른 패키지의 클래스 X X X O
접근 가능 영역 클래스 내 동일 패키지 내 동일 패키지와
자식 클래스
모든 클래스

 

  • static 멤버

- 클래스 하나당 하나만 생성되는 멤버로서 동일한 클래스의 모든 객체들이 공유

- non-static멤버 vs static 멤버

  non - static 멤버 static 멤버
선언 class Sample{
int n;
void g() {...}
}
class Sample{
static int m;
static void g() {...}
}
공간적 특성 멤버는 객체마다 별도 존재(인스턴스 멤버) 멤버는 클래스당 하나 생성(클래스 멤버)
시간적 특성  객체 생성 시에 멤버 생성됨 클래스 로딩 시에 멤버 생성
공유의 특성 공유되지 않음 동일한 클래스이 모든 객체들에 의해 공유됨

- static 메소드의 제약조건

  1. static 멤버만 접근 가능
  2. this 사용 불가

예제 4-12

 

  • final

- final 키워드는 3 군데서 사용됨

  1. 클래스 이름 앞에 사용되면 클래스를 상속받을 수 없음을 지정
  2. 메소드를 선언하면 오버라이딩할 수 없는 메소드임을 선언
  3. 필드를 선언하면 필드는 상수가 됨
728x90

'Study > Java' 카테고리의 다른 글

[Java] 모듈과 패키지, 자바의 기본 패키지  (0) 2022.06.22
[Java] 상속과 인터페이스  (0) 2022.06.04
[Java] 예외처리  (0) 2022.05.17
[Java] 배열  (0) 2022.05.17
[Java] 반복문  (0) 2022.05.17
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.