class Parent {
it compute(int num){
if(num<=1) return num;
return compute(num-1) + compute(num-2);
}
}
class Child extends Parent{
int compute(int num){
if(num<=1) return num;
return compute(num-1) + compute(num-3);
}
}
public class main {
public static void main(String[] args) {
Parent obj = new Child();
System.out.print(obj.compute(7));
}
}
🖍 2
1️⃣ Child클래스의 생성자를 이용하여 Parent클래스의 객체 변수 obj를 선언하고, Child클래스의 생성자를 호출한다.
[부모클래스명][객체변수명] = new [자식클래스생성자()] : 부모 클래스의 객체 변수를 선언하면서 자식 클래스이 생성자를 사용하면 형 변환이 발생한다. 이 때, 부모 클래스와 자식 클래스에 동일한 속성이나 매소드가 있으면 부모 클래스의 속성이나 매소드가 자식 클래스의 속성이나 매소드로 재정의된다.
2️⃣obj.compute(7)
에 의해 Child 클래스의compute()
함수 호출.
7을 매개변수로 넘겨주어 재귀함수로 리턴 (n - 1) + (n - 3)
3️⃣compute(6) + compute(4)
4️⃣(compute(5) + compute(3))
+(compute(3) + compute(1))
5️⃣{((compute(4) + compute(2)) + (compute(2) + compute(0))}
+{(compute(2) + compute(0)) + 1}
6️⃣[{(compute(3) + compute(1))} + {(compute(1) + compute(-1))}] + {(compute(1) + compute(-1)) + 0}
+{(compute(1) + compute(-1)) + 0 + 1}
7️⃣{(compute(2) + compute(0)) + 1} + 1 + (-1) + 1 + (-1)
+1 + (-1) + 0 + 1
8️⃣(compute(1) + compute(-1)) + 0 + 1
+1
9️⃣1 + (-1) + 1
+1
🔟1 + 1
= 2
IP 패킷에서 외부의 공인 IP주소와 포트주소에 해당하는 내부 IP주소를 재기록하여 라우터를 통해 네트워크 트래픽을 주고받는 기술은?
🖍 NAT(Network Address Transformation)
- 한 개의 정식 IP 주소에 대량의 가상 사설 IP 주로를 할당 및 연결하는 기능
- '네트워크 주소 변환'의 약자
- 한 개의 IP 주소를 사용해서 외부에 접속할 수 있는 노드는 어느 시점에서 1개만으로 제한되는 문제가 있으나, 이때는 IP Masquerade(마스커레이드)를 이용하면 됨
다음 자바 코드를 실행할 경우 에러가 발생이 된다. 에러가 발생하는 라인을 작성하시오.
1 class Person {
2 private String name;
3 public Person(String val) {
4 name = val;
5 }
6 public static String get() {
7 return name;
8 }
9 public void print() {
10 System.out.println(name);
11 }
12 }
13 public class soojebi {
14 public static void main(String[] args) {
15 Person obj = new Person("Kim");
16 obj.print();
17 }
18 }
🖍 7
public static String get() { return name; }
- 6라인의
static
때문에 7라인에서 에러 발생.- 7: error: non-static variable name cannot be referenced from a static context
(비정적 변수 이름은 정적 컨텍스트에서 참조할 수 없음.)❗문제 설명
name
은 인스턴스 변수인데,get()
메서드는static
메서드- Java에서는
static
메서드 안에서 인스턴스 변수에 직접 접근할 수 없음- 왜냐하면
static
메서드는 클래스 레벨에서 실행되기 때문에, 특정 인스턴스와 관련이 없음✅ 해결 방법
get()
메서드를static
에서 인스턴스 메서드로 바꾸기:public String get() { return name; }
- 이렇게 바꾸면
obj.get()
으로 호출할 수 있음
name
을static
변수로 만들기 (하지만 이건 의도에 따라 다름):private static String name;
- 하지만 이 경우 모든
Person
객체가 같은name
을 공유하게 되므로, 일반적으로 사람마다 다른 이름을 갖는 걸 원하면 이건 적절하지 않음
x, y = input("x, y의 값을 공백으로 구분하여 입력: ")._____()
print("x의 값:", int(x))
print("y의 값:", int(y))
# 실행결과
# x, y의 값을 공백으로 구분하여 입력: 5 10
# x의 값: 5
# y의 값: 10
🖍 split
- slice : 객체명[초기위치:최종위치:증가값]
- pop() : 리스트의 '위치'에 있는 값을 출력하고 해당 요소를 삭제함
[10,11,12]pop(1)
→11
- extend() : 기존 리스트에 인수의 요소들을 리스트의 끝에 추가하여 확장하는 메소드로, 여러 값을 한 번에 추가 가능
['a','b'].extend('c','d')
→['a','b','c','d']
- reverse() : 리스트의 순서를 역순으로 뒤집음
[1,2,3].reverse()
→[3,2,1]
- sort() : 리스트를 정렬하며, 기본값은 오름차순
- True: 내림차순, False: 오름차순
[5,1,3].sort()
→[1,3,5]
🖍 패키지(Package)
패키지 다이어드램은 시스템의 서로 다른 패키지들 사이의 의존 관계를 표현하며, 유스케이스나 클래스 등의 모델 요소들의 그룹화한 패키지의 관계를 표현한다.
- 패키지 : 요소들을 그룹으로 조직하기 위한 요소
- 의존관계 : 하나의 패키지가 다른 패키지를 사용하는 관계
- 의존성의 성질을 나타내기 위해 스테레오 타입을 붙일 수 있음
- 스테레오 타입 :<<import>>
,<<access>>