public class Soojebi {
public static void main(String[] args) {
A b = new B();
b.paint();
b.draw();
}
}
class A {
public void paint() {
System.out.print("A");
draw();
}
public void draw() {
System.out.print("B");
draw();
}
}
class B extends A {
public void paint() {
super.draw();
System.out.print("C");
this.draw();
}
public void draw() {
System.out.print("D");
}
}
🖍 BDCDD
1️⃣ main에서 코드 시작.
2️⃣ b 변수에 B class 생성. B의 생성자 B()와 B의 부모인 A의 생성자 A()를 호출해야 하지만 없어 호출할 수 없음.
3️⃣b.print();
구문에 의해 b는 B class이므로 B class의 paint()호출.
4️⃣super.draw();
구문에 의해 B의 부모인 A class를 호출해 A의draw()
에서 B 출력.
5️⃣draw();
구문에 의해 B의draw()
에서 D 출력.
→ 왜냐하면, 부모클래스와 자식클래스가 상속관계에 있으며, 동일한 메소드명과 동일한 타입 파라미터(변수)를 가지면 오버라이딩 관계가 형성되어 자식클래스의 동일한 메서드로 이동하기 때문.
6️⃣System.out.print("C");
구문에 의해 C 출력.
7️⃣this.draw();
구문에 의해 B class에 있는draw()
를 호출하여 D 출력.
8️⃣b.draw();
구문에 의해 B의draw()
에서 D 출력.
• 사용자가 자격 증명을 공유하지 않고도 타사 앱의 데이터 또는 리소스에 액세스 할 수 있도록 권한을 부여할 수 있는 개방형 프로토콜.
• Facebook, Twiiter와 같은 소셜 미디어 플랫폼에서 널리 사용되며 외부 계정을 기반으로 토큰을 이용하여 간편하게 회원가입 및 로그인 가능.
🖍 OAuth
Linux에서 사용자에게 읽기/쓰기/실행 권한을 부여하고, 그룹에게는 읽기/실행을 부여하고, 그 이외에는 실행 권한을 test.txt파일에 부여하기 위한 명령어를 작성하시오.(8진법 사용)
🖍 chmod 751 test.txt
1️⃣ rwx r-x --x
↓ ('-'는 0, 나머지는 1로 바꿈)
2️⃣ 111 101 001
↓ (3자리 2진수를 8진로 변환)
3️⃣ 7 5 1
- UNIX에서 파일의 권한(permission)을 10자리로 표현.
1번째 : d(디렉토리) / -(파일)
2~4번째 : 소유자(Owner) 권한
5~7번째 : 그룹(Group) 권한
8~10번째 : 기타 사용자(Other) 권한- r(읽기), w(쓰기), x(실행), -(권한없음)
- 권한 표현 방식을 8진수로 변경
각 권한을 권한있음(1) / 권한없음(0)으로 변경 뒤 8진수로 변환
Linux는 1991년 리누스 토발즈(Linus Torvalds)가 UNIX를 기반으로 개발한 운영체제이다. 프로그램 소스 코드가 무료로 공개되어 있기 깨문에 프로그래머가 원하는 기능을 추가할 수 있고, 다양한 플랫폼에 설치하여 사용이 가능하다.
#include <stdio.h>
int perfect_number(int n) {
int i, sum = 0;
for (i = 1; i <= n / 2; i++){
if (n % i == 0) // 나머지가 0이면 true
sum += i;
}
if (n == sum)
return 1;
return 0;
}
int main(){
int i, sum=0;
for (i = 2; i <= 100; i++){
if (perfect_number(i)) // return된 값이 0이면 거짓이므로 if문 안의 코드를 실행하지 않음
sum += i;
}
printf("%d ", sum);
return 0;
}
🖍 34
1️⃣ main에서 코드 시작.
2️⃣ i = 6,perfect_number(i)
3️⃣ n = 6,for (i = 1; i <= n / 2; i++)
→if (6 % 1 == 0)
→sum += 1;
→if (6 % 2 == 0)
→sum += 2;
→if (6 % 3 == 0)
→sum += 3;
∴ sum = 1+2+3
4️⃣ n = 6, sum = 6,if (n == sum)
→return 1;
5️⃣ i = 6, perfect_number(i) = 1,if (perfect_number(i))
∴ sum = 6
7️⃣ ∴ sum = 6 + 28
완전수란? 자기 자신을 제외한 약수(진약수)들의 합이 자기 자신이 되는 수이다.
최초 7개의 완전수 6, 28, 496, 8128, 33550336이다.
C언어에서 구조체 멤버에 접근하기 위해 괄호안의 '기호'를 작성하시오.
#include <stdio.h>
#include <stdlib.h>
typedef struct Data{
char c;
int *numPtr;
} Data;
int main(){
int num = 10;
Data d1;
Data *d2 = malloc(sizeof(Data));
d1.numPtr = #
d2( )numPtr = #
printf("%d\n ", *d1.numPtr); //10
printf("%d\n ", d2( )numPtr); // -1556740108, 메모리의 첫번째 주소 리턴
free(d2); //더 이상 필요없을 때 해제
return 0;
}
🖍 →
구조체는 구조체 변수로 접근할 때는.
, 구조체 포인터로 접근할 때는→
로 접근한다.
#include <stdlib.h>
void* malloc(size_t size)
malloc()
함수를 사용하기 위해서는는 <stdlib.h>
헤더나 <malloc.h>
헤더를 포함해야 한다.
#include <stdlib.h> // free함수가 포함된 헤더파일
void free(void *ptr);
malloc()
함수를 사용한 뒤 꼭 메모리를 해제시켜줘야 한다.
malloc()
함수를 호출하면 메모리만 할당하며 할당한 메모리의 값을 초기화하지 않는다. 즉, 메모리를 동적 할당하면 힙 메모리에 공간이 생성된다. 이 공간은 프로그램이 종료될 때까지 존재해, 동적으로 할당받은 힙 메모리를 해제하지 않으면 사용하지 않는 메모리량이 증가하게 되어 메모리의 낭비를 초래한다. 이러한 현상을 메모리 누수라고 한다. 사용하지 않는 메모리는 free()
함수를 호출하여 해재해야 한다.
참고,
https://m.blog.naver.com/javrin4/220956809081
https://coding-factory.tistory.com/671