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(마스커레이드)를 이용하면 됨
다음 자바 코드를 실행할 경우 에러가 발생이 된다. 에러가 발생하는 라인을 작성하시오.
class Person {
private String name;
public Person(String val) {
name = val;
}
public static String get() {
return name;
}
public void print() {
System.out.println(name);
}
}
public class soojebi {
public static void main(String[] args) {
Person obj = new Person("Kim");
obj.print();
}
}
🖍 7
- 6라인의
static
때문에 7라인에서 에러 발생.- 7: error: non-static variable name cannot be referenced from a static context
(비정적 변수 이름은 정적 컨텍스트에서 참조할 수 없음.)- Person 클래스의
get()
메소드는public static
으로 선언되었고, Person 객체를 만들지 않고도 호출할 수 있는 정적 메소드이다.get()
메소드는 개인 인스턴스 변수인name
변수에 접근하려고 한다.
인스턴스 변수는 클래스로부터 생성된 각 객체에 고유하며, 정적 메소드는 이러한 변수에 직접 접근할 수 없다.
*인스턴스 변수(instance variable)는 클래스에 정의된 변수- 해결 방법
- name 변수를 static으로 만들기:
모든 Person 객체가 같은 이름 값을 공유하도록 의도하는 경우 name을 static으로 선언.- 특정 객체의 이름 반환하기:
get()
메소드에서 static 키워드를 제거하고 Person 인스턴스를 인수로 받게하여 특정 Person 객체에서 이 메소드를 호출.- 권장 사항:
'특정 객체의 이름 반환'은 일반적으로 객체 지향 설계 원칙과 캡슐화를 더 잘 반영하기 때문에 선호되며, 각 Person 객체가 고유한 이름을 가질 수 있음.
Private 멤버 : class 외부에서 접근할 수 없는 변수
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>>