본문 바로가기

전체 글

(68)
객프 13주차 자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가짐. 하지만 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원. 하지만 다중 상속의 이점을 버릴 수는 없기에 자바에서는 인터페이스라는 것을 통해 다중 상속을 지원. 인터페이스란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미. 자바에서 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함. 하지만 인터페이스(interface)는 오로지 추상 메소드와 상수만을 포함. 자바에서 인터페이스를 선언하는 방법은 클래스를 작성하는..
13주차 컴프 15장 데이터가 파일에 들어가 있고, 결과물을 화면이 아닌 파일로 보냄. 파일에 데이터가 있는 이유는 많은 양의 데이터가 있기 때문. 데이터 입력후 컴파일을 하면 다시 입력을 해야 됨. 지뢰 찾기의 경우 일일히 입력을 해야하기 때문에 그걸 파일에 저장하고 그대로 갖고 옴. 파일 입출력과 관련하여 배우자. 스트림 : 바이트의 흐름 컴퓨터 - 키보드, 마우스, 스캐너, 마이크, 음성, 터치 등등의 입력장치 존재 키보드를 통해, 마우스를 통해, 마이크를 통해 입력이 되면 입력 장치에 따른 함수를 만들어야 함. 그럴 때마다 값들을 새로운 입력장치가 있으면 이를 받아들이기 위해 다른 코드가 등장해야함. 출력장치도 마찬가지임. 그러면 입력장치와 출력장치가 계속 바뀌게 되어서 의존성이 높아짐. 이 의존성을 낮추기 위..
객프 11주 추상클래스 하나 이상의 추상 메소드를 포함하는 클래스 *추상메소드 : 완전하게 구현되어 있지 않은 메소드 (중괄호 없이 선언됨) 추상 클래스라는 것을 알려주기 위해 abstract를 붙여야 함. abstract class Shape3 { int x, y; public void translate (int x, int y) { this.x = x; this.y = y; } public abstract void draw(); }; class Rectangle2 extends Shape3 { int width, height; public void draw() { System.out.println("사각형 그리기 메소드"); } }; class Circle2 extends Shape3 { int radius; p..
컴프 12주차 struct student { // student는 구조체명, 태그, 메모리가 잡히지 않음 int id; int midterm; int final; }; 배열과다르게 형태가 다른 데이터도 하나로 묶을 수 있음. struct student aStudent; //일반 변수 struct student *sp = &aStudent; //포인터의 주소값을 가리킴. aStudent.id //일반 구조체가 접근할 때 *sp.id //포인터변수가 가리키는 값을 접근할 때 sp->id //위의 코드와 같음. 구조체 변수에 접근할 때 => 우선순위 : (*sp).id => sp자리로 가서 id //포인터 sp를 사용하여 구조체 멤버 각각에 값 설정 sp->id = 19950001 //(*sp).id = 19950001; ..
객프 10주차 - 상속은 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미. - 상속을 이용하면 기존에 정의되어 있는 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스를 생성가능. - 기존에 정의되어 있던 클래스를 부모 클래스(parent class) 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class) 라고 함. 1. 기존에 작성된 클래스 재사용 가능 2. 자식 클래스에서 중복되는 멤버를 작성하지 않아도 됨. 3. 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련함. 부모 클래스의 모든 특성을 물려받아 새롭게 작성된 클래스 -> 부모 클래스에 새로운 필드를 하나 추가하면, 자식 클래스에도 자동으로 해당 필드가 추가된 것처럼 동작함. - 자식 클..
컴프 11주차 struct student { // student는 구조체 명, 태그, 메모리가 잡히지 않음 int id; //멤버 int midterm; //멤버 int final; //멤버 }; student에 대한 기본 틀 기본 자료형이 모여서 파생자료형이 되는데 구조체는 파생자료형임. - 구조체 변수 구조체변수 선언, 메모리가 잡힘 struct student aStudent; // aStudent는 구조체 변수 *struct student자체가 자료형이 됨. => 구조체는 자료형이고, 그 자료형으로부처 변수 선언이 가능한 것임. 구조체 변수 초기화 선언과 동시에 초기화 struct student aStudent = {19950001, 100, 50} -> 각각의 멤버에 초기값 부여. . (dot)연산자 : 구조체..
객프 10주차 객체의 생성과 소멸 다른 프로그래밍 언어 : 객체를 제거하지 않으면 메모리 공간 부족 -> 소멸하는 과정 필요 자바 : 가상머신기계에서 자동으로 객체를 제거해주기 때문에 별도의 소멸 과정 필요X *자바 가비지 컬렉터 : 사용하지 않는 객체를 자동으로 모으는 공간 => 지워달라는 명령어를 사용할 수 있으나, 실행하진 않음. => JVM이 알아서 작동 1. 코드 2. 사용하지 않는 객체 선택 3. 삭제 4. 압축 인수전달방법 1. Call-by-value : 인수값 전달 => return이 필요함. 지역변수이기 때문에 클래스를 벗어나면 값 전달X 2. Call-by-reference : 주소값 전달 => return 필요하지 않음. 클래스를 벗어나도 값 전달O 정적멤버(static) VS 인스턴스 멤버 정적..
컴프 9주차 요약 Call-by-value (인수의 값을 매개변수로 전달) #include void f1(int x){ x = x + 10; } int main(void){ int a = 5; f1(a); //인수의 값을 전달 printf("%d\n", a); } Call-by-reference (인수의 주소값을 매개변수로 전달) #include void f1(int *p){ *p = *p + 10; } int main(void){ int a = 5; f1(&a); //인수의 주소값을 전달 printf("%d\n", a); } 예1) void swap(int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; } int main(void) { int a = 100, b = 200;..