1. 접근 제한자

: 자바에서는 접근 제한자를 설정하여 해당 클래스(혹은 메소드 등)의 사용 권한을 설정할 수 있다.

예로 자바 메인 메소드를 살펴보면,

// 자바 메인 메소드
public static void main(String[] args) {
	/* 
    	public = 공개되는 ( 어디서나 접근이 가능한 ) 메소드라는 뜻
	static = 정적 메소드 선언
    	void = return 값이 없음 
        */
}

위와 같이 메인 메소드는 외부에서도 사용할 수 있도록 public으로 선언된 걸 알 수있다.

접근 제한자를 사용하는 목적으로는 무분별한 클래스 호출을 막으면서 해당 멤버나 데이터를 보호하는 것에 있다.

 

 

2. 각 키워드에 따른 접근제한

public서부터 하위 그룹으로 갈수록 접근 가능한 클래스가 적어진다.

 

위 그림과 같이 자바의 접근 제한자로는 public, protected, default, private가 있다.

최상위 집합으로 볼 수 있는  public은 외부에서 자유롭게 사용할 수 있도록 공개되는 멤버를 만들고, 하위 접근 제한자로 갈 수록 접근 가능한 멤버들이 줄어든다.

 

public

: 클래스, 필드, 생성자, 메소드에 적용이 가능하고, public으로 선언된 멤버는 외부 클래스에서 자유롭게 접근할 수 있다.

예 ) 라이브러리 클래스

protected

: 필드, 생성자, 메소드에 적용이 가능하고, 같은 패키지나 자식 클래스에서만 접근 할 수 있다.

private

: 필드, 생성자, 메소드에 적용이 가능하고, 선언된 클래스 내부에서만 접근이 가능하다.

default

: 클래스, 필드, 생성자, 메소드에 적용이 가능하고, 같은 패키지에서만 접근할 수 있다.

위 세가지 접근 제한자 (public, protected, private)로 지정되지 않으면 자동으로 default로 선언된다. 


클래스의 접근 제한자

클래스에서는 public과 default 접근제한자만 사용이 가능하다.

해당 위치에서 접근 불가능한 클래스를 호출하려 하면 컴파일 에러가 뜬다.

 

생성자의 접근 제한자

생성자는 public , protected, default, private 접근 제한자를 사용가능하다.

생성자의 기본 접근제한자는 클래스의 접근제한자를 사용하게 된다. 

 

 

 

 

1. 객체지향 프로그래밍이란?

객체지향 프로그래밍 (OOP: Object-Oriented Programming) 은 컴퓨터 프로그래밍 패러다임의 한 종류 이며, 객체(Object)와 객체(Object)간의 메시지 전달을 통해 프로그래밍을 구현하는 방식이다. 특징으로는 객체지향으로 짜인 프로그램은 유연하고 변경이 쉽고 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 지향한다.[각주:1]

 

2. 요소

객체(Object)
클래스의 인스턴스 개체(Entity) 현실 세계의 본질
속성(Attribute) 자료 저장소 (cf.변수)
메소드(Method) 호출 단위 (cf.함수)
클래스(Class) 객체를 생성하는 추상 메소드 타입
메시지(Message)  객체 간의 통신

 

3. 특징

 

자료 추상화

불필요한 정보는 숨기고 중요 정보만 표현하며 프로그램을 간단히 만드는 것.

 

상속

기존 클래스의 자료와 연산을 새로운 클래스에서 사용할 수 있게 하는 기능.

일반적으로 상속 받는 클래스를 자식 클래스(하위 클래스)라고 하며, 상속하는 클래스를 부모 클래스(상위 클래스) 라고 한다. 클래스 간의 종속 관계를 형성하여 객체를 조직화 하는 역할을 한다.

 

다중 상속

하나의 클래스가 2개 이상의 클래스로 부터 상속받을 수 있게 하는 기능.

 

다형성 
한 요소에 여러 개념을 넣어 놓은 것. [각주:2]

 

동적 바인딩

런타임 중 변경 될 수 있는 바인딩을 말한다. 

 

4. SOLID

로버트 마틴이 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙의 앞글자를 딴 것을 말한다.

유지보수와 확장이 쉬운 프로그램을 개발하기 위한 원칙이다.

 

SRP 단일 책임 원칙(Single Responsibility Principle)

"한 클래스는 하나의 책임만 가져야 한다."

 

OCP 개방 폐쇄 원칙 (Open Closed Principle)

"소프트웨어 요소는 확장에는 열려있어야하나, 변경에는 닫혀있어야 한다."

 

LSP 리스코프 치환 원칙 (Liskov Substitution Principle)

"프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다."

 

ISP 인터페이스 분리 원칙 (Interface Segregation Principle)

"특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다."

 

DIP 의존관계 역전 원칙 (Dependency Inversion Principle)

"프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다."

 

 

 

참조문헌

NCS 정보처리기술사 연구회,「수제비 정보처리기사 실기vol.1」,건기원,2021

위키백과 '객체 지향 프로그래밍' https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

위키백과 'SOLID (객체 지향 설계)' https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84) 

 

SOLID (객체 지향 설계) - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

  1. 하나의 목적으로 데이터를 모아놓은 데이터형을 사용하고, 클래스간 독립적인 디자인을 하기 때문이다. [본문으로]
  2. 오버라이딩, 오버로딩이 있다 [본문으로]

+ Recent posts