패스트캠퍼스 핀테크 서비스 백엔드 개발자 3기 - Day7 (객체 지향 프로그래밍 입문 2)

유재학·2022년 9월 23일
0

참조자료형 변수

  • 변수의 자료형은 기본 자료형과 참조 자료형으로 구분된다.

  • 기본 자료형 : 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기초, 객체 지향 프로그래밍 기초에 대한 수업을 다 듣고난 후 나는 내가 개발자로써 더 성장했다는 것을 확실히 느낄 수 있었다. 학부생때 어설프게 알고 있던 기초 지식들을 이번에 다시한번 기초에 대한 수업을 들으면서 확실하게 이해할 수 있었다.

노트북에 남아있던 3년전 학부생때 만들었던 프로젝트를 다시 열어보았다. 진짜 엉망이라는 생각이 들었다. 왜 쓰는지 어떤 원리로 쓰는지도 모르는 채 그저 문제를 풀기위해 어거지로 작성한 코드라는 느낌이 확 들었다. 일주일만에 내가 얼마나 부족한지 다시 한번 깨닫게 되었다.

profile
github : https://github.com/kiaeh2323 , email : kiaeh9269@gmail.com

0개의 댓글