은닉화(Hiding)
클래스 = 설계도 즉, 클래스를 이용한다는 것은 객체지향 프로그래밍을 하고 있다는 의미입니다.
(잘 구현하는지에 따라서는 개인차..)
이런 객체의 기능을 설계도화 하기 위해서는 객체의 기능들을 잘 모아야 하는데, 이를 용어로 풀이하면 캡슐화
라고 합니다. 객체와 관련된 데이터, 기능만을 한데 모은다는 의미입니다.
만약 객체 변수를 public 으로 설정하면, 외부에서 마음대로 변수를 사용할 수 있어 문제가 발생합니다.
- 의도하지 않은 범위의 값을 넣을 수 있음.
- 원하지 않는 데이터타입을 강제로 형변환하여 넣을 수도 있음.
private 으로 선언시
getter
를 이용하여 가져올 수 있습니다.
this
키워드 사용- 클래스의 은닉화 : 변수에 직접적인 접근을 막는다. (private)
- getter(return), setter(this) 를 통해 변수에 접근한다.
오브젝트 확인
instanceof
는 오브젝트가 지정한 클래스의 오브젝트인지를 조사하기 위한 연산자입니다.
**boolean flag = a instanceof B;
왼쪽 오브젝트가(a) 오른쪽 클래스 또는 서브 클래스(B)의 오브젝트라면 true
를 반환.
또한 instanceof는 지정한 인터페이스를 오브젝트가 구현하고 있는지를 조사할 수 있습니다.
클래스(Class)
- 자바의 모든 클래스와 인터페이스는 컴파일(Compile) 후 class 파일로 생성됩니다.
- class 파일에는 객체의 멤버변수, 메서드, 생성자 등이 포함되어 있습니다.
- 클래스는 컴파일된 class 파일에서 객체의 정보를 가져올 수 있습니다.
- reflection 프로그래밍 : 클래스를 이용하여 클래스의 정보를 가져오고 이를 활용하여 인스턴스를 생성하고, 메서드를 호출하는 등의 프로그래밍 방식
Class.forName()
프로그래밍 할 때 어떤 클래스를 사용할지 모를 때 변수로 처리하고, 실행될 때 해당 변수에 대입된 값의 클래스가 실행될 수 있도록 Class에서 제공하는 static 메서드를 말합니다.
String className = "classPerson";
Class aClass = Class.forName(className);
실행 시 동적 로딩
되므로 경우에 따라 다른 클래스가 사용될 수 있어 유용합니다.
동적 로딩이란?
컴파일 시에 데이터 타입이 모두 binding
되어 자료형이 로딩되는 것(static loading)이 아니라 실행 중에 데이터 타입을 알고 binding
되는 방식
컴파일 타임에 체크할 수 없으므로 해당 문자열에 대한 클래스가 없는 경우 예외(ClassNotFoundException)이 발생할 수 있음
사용예시
- 오라클의 JDBC 드라이버 사용 등, 데이터베이스 관련 프로그램을 짤 때 외부 드라이버를 사용하기 위해.
절차지향 & 객체지향
절차지향 프로그래밍은 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다.
이는 서로 분리되면 안되며, 함수 호출 순서가 틀려서도 안되며, 하나가 고장 나면 전체 기능이 마비됩니다.
절차지향은 데이터를 중심으로 함수를 구성합니다. 함수의 호출 순서가 바뀌면 데이터의 전달과 값이 변할 수 있습니다.
한마디로 순서대로 실행됩니다. (순서도를 생각하면 되겠네요~)
객체지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화하고, 그 모듈을 재활용하는 프로그래밍 방식입니다.
코드는 순서대로 실행되지만, 제작에 있어서 순서는 상관이 없습니다.
단순히 객체를 만들고 사용하는데 멈추지 않고, 클래스를 만들고 오버로딩, 오버라이딩, 다형성 등을 활용하여 잘 사용한다면 보다 아름다운 객체지향 프로그래밍이 될 것입니다. - 이재환 강사님
Reference
'Java' 카테고리의 다른 글
[자바 라이브 스터디] 01. JVM과 자바 코드 (0) | 2021.09.15 |
---|---|
[자바 라이브 스터디] 00. 자바 기본 공부 계획 (0) | 2021.09.13 |
간략한 JVM에 대한 개념.. (0) | 2021.05.17 |
상속 기초 (0) | 2020.09.09 |
클래스 기초 (0) | 2020.09.06 |
댓글