나는 공부할 때 글을 보면 바로 머리로 암기하는 친구들이 진짜 부러웠다. 나는 그렇게 못해서 모르는 단어가 있으면 그것도 하나 하나 시험에 안 나오는 것 까지 찾아가며 찾아보는 습관때문에.. 안 하려고 해도 모르는데 어떻게 넘어가냐 이 말이었다. 그래서 정리하는데도 항상 오래 걸렸는데 가면 갈 수록 조금씩 그 결과가 빛을 보고 있는 것 같아서 한 결 기분이 좋다. 앞전에 공부하면서 뒤에 나올 것들을 미리 공부하게 되어 조금 더 쉽게 알아 볼 수 있게 되고 있기 때문이다.
🔽 객체 지향 프로그래밍의 개념 및 기본 속성 / 추상화
캡슐화란?
캡슐처럼 데이터와 메서드를 하나로 묶어 외부에 드러나지 않도록 정보를 은닉하고 묶는 것이다. 캡슐화를 함으로써 데이터를 보호하고 내용을 노출시키지 않음으로써 결합도를 낮출 수 있다. 결합도가 낮다는 것은 독립성이 강한 것으로 외부로부터 데이터가 함부로 변경되지 못하게 하고 이 또한 영향을 미치지 않도록 한다는 것이다.
* 참고 : 객체 지향 설계 원리 중 하나로 결합도는 낮고 응집도는 높게 프로그래밍 함으로써 유지보수성이 좋게 해야 한다.
패키지(Package)
패키지라는 영어 단어를 한글로 번역하면 “소포”,”묶음”을 의미한다. 이처럼 프로그램에서 사용되는 여러 기능들이나 코드들을 모아 묶은 것을 패키지라고 한다. 데이터와 메서드의 묶음을 클래스라고 한다면 이 클래스와 함수 그리고 데이터를 묶어 코드를 구조화하고 모듈화 하기 위한 것이 패키지이다.
패키지는 하나 이상의 디렉토리에 포함되어 있으며, 이 디렉토리 구조를 이용해 내부 코드를 구성한다. 자바에서는 패키지를 (.)점으로 구분된 이름으로 지정하고 이 이름에 따라 디렉토리 구조를 만들어서 패키지를 구성한다.
✨ 디렉토리(directory)는 파일을 그룹핑하기 위한 폴더로 파일을 구조적으로 정리하고 관리할 수 있게 한다.
패키지 내에서 클래스를 만들어 소스 코드를 만들 때는 무조건 package 패키지 명이 들어가야 한다. 나는 그 날 그 날 패키지를 만들어서 사용하는 편이라 패키지를 적어주지 않아 오류(cannot find symbol)가 발생하기도 한다.
패키지를 만들면 같은 이름의 클래스를 패키지마다 설정해줄 수 있다.
Import 문
import 문의 경우 Scanner와 같은 라이브러리에 기능을 불러올 때도 볼 수 있어 익숙한 경우가 있을 것이다.
IntelliJ나 Eclipse와 같은 IDE를 사용할 때, import가 필요한 경우 단축키를 사용해 import를 쉽게 해올 수 있다.
* 참고 : IntelliJ (ctrl + alt + O) / Eclipse(ctrl + shift + O)
라이브러리에서 import해 온 클래스나 유틸 등은 import된 경로를 따라 라이브러리에서 찾아가면 쉽게 원본을 찾을 수 있을 것이다.
이처럼 다른 패키지의 클래스를 불러 오기 위해서는 import를 사용해야 한다.
4월 19일 패키지에서 import 없이 whileEx2클래스를 불러오고 import문을 사용하여 forEx 클래스를 불러왔다. import 해서 불러오는 방법은 클래스 내부에서 객체를 생성하는 것과 크게 차이가 없다. 그리고 생성된 example2 메서드를 호출해주는 구문을 추가해 example2() 메서드가 실행되도록 하였다.
package java_0425;
import java_0419.forEx;
public class ImportExample {
public static void main(String[] args) {
// import 없이 whileEx2 불러올 때
java_0419.whileEx2 example = new java_0419.whileEx2();
// import 해서 바로 불러올 때 (패키지명 생략 후 클래스명 바로 사용 가능)
// forEx 클래스의 인스턴스 생성
forEx example2 = new forEx();
example2();
}
private static void example2() {
// forEx 클래스의 main() 메서드 호출
forEx.main(null);
}
}
// 결과값
// cola님은 향상된 for문 공부 중입니다.
// nurungzi님은 향상된 for문 공부 중입니다.
// mary님은 향상된 for문 공부 중입니다.
원래 있던 forEx의 내용을 그대로 출력하기 위해 example2() 메서드의 내용은 forEx.main(null); 로 하였다. 전달 인자를 ‘null’로 전달함으로서 main() 메서드에 사용하는 ‘args’ 배열을 ‘null’로 초기화 하는 것과 같은 효과를 낼 수 있다.
➕ java_0419.forEx
package java_0419;
public class forEx {
public static void main(String[] args) {
String[] names = {"cola","nurungzi","mary"};
for(String name : names) {
System.out.println(name + "님은 향상된 for문 공부 중입니다.");
}
}
}
// 결과값
// cola님은 향상된 for문 공부 중입니다.
// nurungzi님은 향상된 for문 공부 중입니다.
// mary님은 향상된 for문 공부 중입니다.
평소에 package를 자주 만들어 쓰던 탓에 예시를 만들기 매우 쉬웠다 : )
package를 import해서 사용하는 법 까지 배우니 더욱 편하게 사용할 수 있을 듯 하다!
'LANGUAGE > JAVA' 카테고리의 다른 글
[JAVA] 객체 지향 프로그래밍 / 추상화(Abstract) - 상속 , 오버라이딩, 사용 이유 (0) | 2023.04.27 |
---|---|
[JAVA] 객체 지향 프로그래밍 / 다형성(polymorphism) - 오버로딩, 오버라이딩, 참조변수의 타입 변환, instanceof 연산자 (0) | 2023.04.27 |
[JAVA] JAVA 객체지향 프로그래밍 / 메서드 오버라이딩(Method Overriding)이란? (0) | 2023.04.25 |
[JAVA] 자바 객체 지향 프로그래밍 / 상속화(inheritance) (0) | 2023.04.25 |
[JAVA] 기본 변수 와 참조 변수 / 하루 종일 걸려 이해한 참조 변수 쉽게 이해하기 위해 정리 (0) | 2023.04.25 |