상세 컨텐츠

본문 제목

자바강의 - [3주차] 객체와 객체 지향 프로그래밍 (2)

Programming/Java

by leediz 2022. 2. 6. 20:13

본문

자바강의 - [3주차] 객체와 객체 지향 프로그래밍 (2)


변수의 자료형

  • 기본형(primitive type)
    • 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)
    • 계산을 위한 실제 값을 저장 - 총 8개
  • 참조형
    • 객체의 주소를 저장
    • 8개의 기본형을 제외한 나머지 타입

접근 제어자 (access modifier)

  • 멤버 또는 클래스에 사용되며 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할
  • 접근 제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자
  • private : 같은 클래스 내에서만 접근 가능
  • (default) : 같은 패키지 내에서만 접근 가능
  • protected : 같은 패키지나 다른 패키지의 자손클래스에서 접근 가능
  • public : 접근 제한이 없음
  • 접근 범위가 넓은 쪽에서 좁은 쪽의 순서
    • public > protected > (default) > private
  • private으로 선언된 멤버 변수(필드)에 대해 접근 또는 수정할 수 있는 메서드를 public으로 제공
  • 보통 멤버변수의 값을 읽는 멤버변수의 이름을 ‘get멤버변수', 멤버변수의 값을 변경하는 메서드의 이름을 ‘set멤버변수이름'으로 함
  • get으로 시작하는 메서드를 getter, set으로 시작하는 메서드를 setter라고 부름

캡슐화 (encapsulation)

  • 클래스나 멤버 등에 접근 제어자를 사용하는 이유는 클래스 내부에 선언된 데이터를 보호하기 위함
  • 이러한 것을 데이터 감추기(data hiding)이라 하며, 객체지향개념의 캡슐화(encapsulation)라고 함
  • 대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만 제공하여 일관된 기능을 구현하게 함
  • 각각의 메서드나 멤버 변수를 접근함으로써 발생하는 오류를 최소화 함

객체 자신을 가르키는 참조면수 - this

  • this
    • 인스턴스 자신을 가리키는 참조변수
    • 인스턴스의 주소가 저장되어 있음
    • 인스턴스 멤버에서만 사용 가능함
  • this(), this(매개변수)
    • 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용
  • this는 ‘참조 변수'이고, this()는 ‘생성자’
  • 클래스 내에서 참조변수가 가지는 주소 값과 동일한 주소 값을 가지는 키워드

클래스의, 공통적인 - static

  • 클래스 변수(static멤버변수)는 하나의 변수를 모든 인스턴스가 공유하므로 인스턴스에 관계 없이 같은 값을 가짐
  • 인스턴스를 생성하지 않고도 사용할 수 있음
  • static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭
  • static 멤버변수
    • 모든 인스턴스에 공통적으로 사용하는 클래스 변수
    • 클래스 변수는 인스턴스를 사용하지 않고도 사용 가능
    • 클래스가 메모리에 로드될 때 생성
  • static 메서드
    • 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드
    • static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없음
  • 인스턴스 멤버를 사용하지 않는 메서드는 static을 붙여서 static 메서드로 선언하는 것을 고려하는 것이 속도 면에서 더 좋을 수 있음
  • 변수의 유효 범위와 메모리
변수 유형 선언 위치 사용 범위 메모리 생성과 소멸
지역 변수
(로컬 변수) 함수 내부에 선언 함수 내부에서만 사용 스택 함수가 호출될 때 생성되고 함수가 끝나면 소멸됨
멤버 변수
(인스턴스 변수) 클래스 멤버 변수로 선언 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능 인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨
static 변수
(클래스 변수) static 예약어를 사용하여 클래스 내부에 선언 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능 데이터 영역 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨

static 응용 - 싱글톤 패턴(singleton pattern)

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

    private static Company instance = new Company();

    private Company() {

    }

    public static Company getInstance() {

        if (instance == null) {
            instance = new Company();
        }

        return instance;
    }

}
  • CompanyTest class
public class CompanyTest {

    public static void main(String[] args) {
        Company company1 = Company.getInstance();
        Company company2 = Company.getInstance();

        System.out.println(company1);
        System.out.println(company2);
    }

}
  • 테스트 코드에서 프린트된 값은 모두 Company@5e91993f 으로 같은 값이 나온다. 따라서 같은 인스턴스를 공유하는것을 알 수있다.

참고자료


Java & SpringBoot로 시작하는 웹 프로그래밍 강의 : #패스트캠퍼스 #내일배움카드 #K디지털크레딧 #바이트디그리 #자바인강

관련글 더보기

댓글 영역