본문 바로가기
Java

Java - 객체지향 프로그래밍 기초 2

by icblue21 2022. 11. 17.
728x90

참조자료형 변수

  • 변수의 자료형은 기본 자료형과 참조 자료형으로 구분된다.
  • 기본 자료형 : int, long, float, double 등
  • 참조 자료형 : String, Date, Student 등 (클래스)
  • 참조 자료형 변수는 클래스형으로 변수를 선언한다.
  • 기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다르다.
  • 참조 자료형을 사용 할때는 해당 변수에 대해 생성하여야 한다.
    단, String 클래스는 예외적으로 생성하지 않고 사용할 수 있다.

접근 제어 지시자와 정보 은닉

접근 제어 지시자(access modifier)

  • 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
  • private : 같은 클래스 내부에서만 접근 가능 ( 외부 클래스, 상속 관계의 클래스에서도 접근 불가)
  • default (기본) : 같은 패키지 내부에서만 접근 가능 ( 상속 관계라도 패키지가 다르면 접근 불가)
  • protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
  • public : 클래스의 외부 어디서나 접근 할 수 있음

정보 은닉(infomation hiding)

  • private으로 제어한 멤버 변수도 public 메서드가 제공되면 접근 가능하지만 변수가 public으로 공개되었을 때보다 private 일때 각 변수에 대한 제한을 public 메서드에서 제어 할 수 있다.
  • 객체 지향 프로그램에서 정보 은닉은 필요한 외부에서 접근 가능한 최소한의 정보를 오픈함으로써 객체의 오류를 방지하고 클라이언트 객체가 더 효율적으로 객체를 활용할 수 있도록 해준다.

캡슐화(encapsulation)

  • 정보 은닉을 활용하여 꼭 필요한 정보와 기능만 외부에 오픈함
  • 대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만은 제공하여 일관된 기능을 구현 하게 함
  • 각각의 메서드나 멤버 변수를 접근함으로써 발생하는 오류를 최소화 한다.\

객체 자신을 가리키는 This

this의 역할

  • 인스턴스 자신의 메모리를 가리킴
  • 생성자에서 또 다른 생성자를 호출 할때 사용
  • 자신의 주소(참조값)을 반환 함

생성자에서 다른 생성자를 호출하는 방법

Student(){
   this("no name", 0);
}

Student(String name, int grade){
	this.name = name;
    this.grade = grade;
    
}

객체간의 협력

  • 객체 지향 프로그램에서 객체 간에는 협력이 이루어짐
  • 협력을 위해서는 필요한 메세지를 전송하고 이를 처리하는 기능이 구현되어야 함
  • 매개 변수로 객체가 전달되는 경우가 발생

여러 인스턴스에서 공통으로 사용하는 변수 만들기 - static

static은 언제 사용할까?

  • 여러 인스턴스가 공유하는 기준 값이 필요한 경우
  • ex) 학생마다 새로운 학번 생성 카드회사에서 카드를 새로 발급할때마다 새로운 카드 번호를 부여 회사에 사원이 입사할때 마다 새로운 사번 부여
  • 선언하는 방법
public static int serialNumber = 0;

변수의 유효범위와 메모리

  • 변수의 유효 범위(scope)와 생성과 소멸(life cycle)은 각 변수의 종류마다 다름
  • 지역변수, 멤버 변수, 클래스 변수는 유효범위와 life cycle, 사용하는 메모리도 다름

  • static 변수는 프로그램이 메모리에 있는 동안 계속 그 영역을 차지하므로 너무 큰 메모리를 할당하는 것은 좋지 않음
  • 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋음
  • 멤버 변수가 너무 많으면 인스턴스 생성 시 쓸데없는 메모리가 할당됨
  • 상황에 적절하게 변수를 사용해야 함

static 응용 - 싱글톤 패턴

싱글톤 패턴(singleton pattern)이란?

  • 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴
  • static 변수, 메서드를 활용하여 구현 할 수 있음

배열(Array)

배열이란?

  • 동일한 자료형의 순차적 자료 구조
  • 인덱스 연산자[]를 이용하여 빠른 참조가 가능
  • 물리적 위치와 논리적 위치가 동일
  • 배열의 순서는 0부터 시작
  • 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용함

배열의 선언

int[] arr = new int[size];
int arr2[] = new int[size];

2차원 배열

  • 이차원 이상으로 구현 된 배열
  • 평면 (이차원 배열) 이나 공간(삼차원 배열)을 활용한 프로그램 구현

객체 배열을 구현한 ArrayList

ArrayList란?

  • 기존의 배열 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당하고 복사해야 했음
  • 또한, 배열의 요소를 추가하거나 삭제하면 다른 요소들의 이동에 대한 구현을 해야 함
  • ArrayList는 객체 배열을 좀더 효율적으로 관리하기 위해 자바에서 제공해 주는 클래스
  • 이미 많은 메서드들이 최적의 알고리즘으로 구현되어 있어 각 메서드의 사용 방법만 익히면 유용하게 사용할 수 있음

ArrayList의 주요 method

 

'Java' 카테고리의 다른 글

Java - 다형성과 인터페이스  (0) 2022.11.17
Java - 상속  (0) 2022.11.17
Java - 객체지향 프로그래밍 기초 1  (0) 2022.11.17
Java - 조건문, 반복문  (0) 2022.11.17
Java - 자료형, 연산자  (0) 2022.11.17

댓글