숙제 리뷰
int math, korean, english;
double avg = (math + korean + english) / 3;
Java
복사
•
(math + korean + english) / 3 는 int타입 간의 연산이고 결과값도 int가 되므로, 형 변환이 필요함.
double avg = (double)(math + korean + english) / 3;
혹은
double avg = (double)(math + korean + english) / 3.0;
Java
복사
오늘 배운 내용
2차원 배열
int[][] arr = new int[a][b] // a * b 행렬이라 생각하면 편함.
Java
복사
•
행렬로 이해해 보는 2차원 배열
•
메모리 상의 실제 2차원 배열
•
2차원 배열에 값을 입력하거나 읽는 방법 = 중첩 for문
int[][] arr = {
{11},
{22, 33},
{44, 55, 66}
};
// 배열의 구조대로 내용 출력
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
Java
복사
생성자(constructor)
•
생성자 : 클래스 명과 똑같은 이름을 가진 함수, 인스턴스(객체)를 생성할 때 사용하는 함수
•
특징 : 리턴 타입이 없음, 다양한 매개변수를 따라 여러 함수가 생성됨.
•
기본 생성자(default 생성자)
◦
개발자가 클래스 내부에 아무런 생성자도 작성하지 않을 시, 컴파일러에 의해 자동으로 작성되는 생성자.
◦
즉, 다른 생성자가 하나라도 작성되면 기본 생성자는 작성되지 않음.
class A {
// 개발자가 직접 작성한 생성자.
public A (String str) {
System.out.println(str);
}
}
public static void main(String[] args) {
A a = new A("안녕하세요");
A aa = new A(); // 오류 발생.
// 개발자가 생성자 함수를 작성했기 때문에, 디폴트 생성자는 자동 생성X
}
}
Java
복사
•
참조 변수 this
◦
현재 객체 스스로를 가리키는 참조 변수
◦
참조 변수 this는, 흔히 매개 변수 이름과 필드 이름이 동일한 경우 혼동을 막기 위해 사용 됨.
class Circle {
int radius;
public Circle (int radius) {
this.radius = radius; //this.radius는 필드, 그냥 radius는 매게변수
}
Java
복사
•
this() 함수
◦
현재 클래스가 지닌 다른 생성자 함수를 호출오는 역할의 함수.
◦
this()에 작성하는 매개변수에 따라 호출하는 생성자가 달라짐.
◦
this()함수는 생성자 내부에서 무조건 가장 위에 작성해야 함.
class Circle {
int radius;
public Circle (int radius) {
this.radius = radius;
}
// 현재 클래스가 지닌 다른 생성자 함수를 호출하는 역할의 this()함수.
public Cricle () {
this(0); // Circle (int radius)를 호출해 0을 대입함. 가장 위에 작성
System.out.println("반지름 = " + radius);
}
Java
복사
패키지
•
패키지 : 비슷한 성격의 클래스를 모아 놓은 자바의 디렉토리
•
종류
◦
내장 패키지 : 자바에서 기본적으로 제공하는 패키지
◦
사용자 정의 패키지 : 개발자(사용자)가 직접 만든 패키지
•
패키지 사용법 : 패키지를 import하기!
◦
import (패키지명) 형식. “ * ”기호를 사용하면 한 번에 여러 패키지를 import 가능.
import java.util.Scanner; // Scanner 를 사용하기 위해 import!!
import java.util.*; // java.util 의 모든 패키지를 한 번에 import
public class example {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // import로 사용 가능해짐!!
Java
복사
•
패키지 사용 팁
◦
패키지 이름은 모두 소문자 (관례)
◦
인터넷 도메인 주소의 역순으로 이름 작성. 이름 끝에는 팀 이름 혹은 프로젝트 명을 추가하기도 함 (관례)
◦
한 패키지 내부에는 동일한 이름의 클래스 파일이 존재 할 수 없음
◦
같은 패키지 내부에서는 클래스 간의 사용이 제한 없음
◦
서로 다른 패키지에 있는 같은 이름을 지닌 클래스를 사용 하고 싶을땐, import 대신 (패키지명).(클래스)로 직접 사용하기
import A.Circle.space;
public class example {
public static void main(String[] args) {
// A패키지의 Circle 클래스를 import해서 사용.
Circle a = new Circle();
// B패키지의 Circle 클래스 사용을 위한 직접 사용.
B.Circle b = new B.Circle();
Java
복사
•
JVM(자바 가상 기계)이 실행시킬 클래스를 찾아내는 방법
1.
현재 디렉토리에서 해당 클래스를 찾기
2.
환경변수에 설정된 클래스 패스를 따라서 찾기
“set classpath = 주소”
3.
사용자가 직접 설정한 클래스 패스를 따라서 찾기
“java -classpath 주소”
접근 제한자
•
클래스와 그 멤버인 변수, 메소드들에 관한 접근 권한을 지정하는 문법
•
종류
public > protected > default(제한자 사용X) > private
•
클래스 정의 대상
◦
public
◦
default
•
변수, 메소드 대상
◦
public
◦
protected
◦
default
◦
private
•
클래스 정의에 사용
◦
public : import를 통해 어디서든 인스턴스 생성 가능
◦
default : 동일 패키지 내에 존재하는 클래스 에서만 인스턴스 생성 가능
•
변수, 메소드에 사용
◦
public : 어디서든 사용 가능
◦
protected : 상속 된 곳이라면, 어디서든 사용 가능
◦
default : 같은 패키지 내에서만 사용 가능
◦
private : 해당 클래스 내에서만 사용 가능
•
정리
정보은닉
•
개념 : 클래스 외부에서 내부 특정 정보로의 직접적 접근을 막는 것.
•
필요성 : 클래스 내부 데이터의 손상과 오용을 막을 수 있음.
•
private 선언을 하고, setter와 getter 메소드를 통해서만 접근 가능하도록 함.
class Circle {
private double rad = 0;
final double PI = 3.14;
public Circle(double r) {
setRad(r);
}
// getter 메소드
public double getRad() {
return rad;
}
// setter 메소드, if 문을 통해 0 이하의 숫자가 입력되는 것을 막음.
public void setRad(double r) {
if(r < 0 ) {
this.rad = 0;
return;
}
this.rad = r;
}
}
public class Example6 {
public static void main(String[] asgr) {
Circle c = new Circle(1.5);
c.rad = 1.5 // 오류 발생. private선언이라 직접 접근 불가
c.setRad(1.5); //setter를 통한 접근.
c,setRad(-0.5); // 반지름이 음수가 되는 것을 setter 가 막음.
}
}
Java
복사