<성적> 테이블에서 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수'를 검색하고자한다.
<성적>
학번 | 과목번호 | 과목이름 | 학점 | 점수 |
---|---|---|---|---|
a2001 | 101 | 컴퓨터구조 | 6 | 95 |
a2002 | 101 | 컴퓨터구조 | 6 | 84 |
a2003 | 302 | 데이터베이스 | 5 | 89 |
a2004 | 201 | 인공지능 | 5 | 92 |
a2005 | 302 | 데이터베이스 | 5 | 100 |
a2006 | 302 | 데이터베이스 | 5 | 88 |
a2007 | 201 | 인공지능 | 5 | 93 |
<결과>
과목이름 | 최소점수 | 최대점수 |
---|---|---|
데이터베이스 | 88 | 100 |
인공지능 | 92 | 93 |
⭐️ 조건 :
🖍 SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
abstract class Vehicle { // 추상클래스 Vehicle을 정의
String name;
abstract public String getName(String val); // 추상메소드 getName()을 정의
5️⃣ public String getName() {
6️⃣ return "Vehicle name: " + name;
}
}
class Car extends Vehicle { // 클래스 Car를 정의하고 부모 클래스 Vehicle에 속한 변수가 메소드를 상속받음
private String name;
2️⃣ public Car(String val) {
3️⃣ name = super.name = val;
}
public String getName(String val) {
return "Car name:" + val;
}
public String getName(byte[] val) {
return "Car name:" + val;
}
}
public class HelloWorld {
public static void main(String[] args) {
1️⃣ Vehicle obj = new Car("Spark");
4️⃣7️⃣ System.out.print(obj.getName());
}
}
🖍 Vehicle name: Spark
1️⃣Car 클래스
의 생성자를 이용하여Vehicle 클래스
의객체 변수 obj
를 선언하고, "Spark"를 인수로Car 클래스
의 생성자를 호출.
•[부모클래스명][객체변수명] = new [자식클래스생성자()]
: 형 변환이 발생하는데, 부모 클래스와 자식 클래스에 동일한 속성이나 메소드가 있으면 자식 클래스의 속성이나 메소드로 재정의됨.
2️⃣클래스 Car
의생성자 Car()
의 시작점,val
에 "Spark"를 저장.
3️⃣val
의 값 "Spark"를 부모 클래스인Vehicle 클래스
의 변수name
과Car 클래스
의 변수name
에 저장. →Car()
를 호출했던 다음 줄인 4️⃣으로 이동.
•super
: 상속 관계에 있는 부모 클래스를 가리키는 예악어
4️⃣ 객체 변수obj
의getName()
메소드를 호출.
• 형 변환으로 인해 호출되는 메소드는Vehicle 클래스
의getName()메소드
. 메소드의 이름이 동일해도 '인수의 자료형의 개수'가 다르면 서로 다른 메소드이기 때문에Vehicle 클래스
와Car 클래스
의getName(String val)
이나,Car 클래스
의getName(byte[] val)
가 아님.
5️⃣getName()
메소드의 시작점.
① 스키마는 데이터베이스의 전체적인 논리적 구조로, 개체 간의 관계와 제약 조선을 나타내며, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스.
② 스키마는 실제로 저장될 레코드의 형식, 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타냄.
③ 스키마는 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것.
🖍 ①개념, ②내부, ③ 외부
🖍 ①→②→③→④→⑤→⑥→⑦ / ①→②→④→⑤→⑥→①
1번째 테스트 케이스 설계 - ② 조건문에서 Yes, ⑥ 조건문에서 No
2번째 테스트 케이스 설계 - ② 조건문에서 No, ⑥ 조건문에서 Yes
- 분기 커버리지(Branch Coverage) :
소스 코드의 모든 조건문에 대해 조건식의 결과가 True인 경우와 False인 경우가 한 번 이상 수행 되도록 테스트 케이스를 설계
class Parent {
int x = 1000;
Parent() {
this(3000);
}
Parent(int x) {
this.x = x;
}
}
class Child extends Parent {
int x = 4000;
Child() {
this(5000);
}
Child(int x) {
this.x = x;
}
int getX(){
return this.x;
}
}
public class HelloWorld {
public static void main(String[] args) {
Child c = new Child();
System.out.println(c.getX());
}
}
🖍 5000
1️⃣Child c = new Child();
는Child 클래스
의객체 번수 c
를 선언하고, 생성자를 호출. 인수가 없음으로Child()
구문으로 이동.
2️⃣this(5000);
구문으로 넘어가기 전에, 자식 클래스의 생성자에는super();
와 같이 부모 클래스의 생성자를 호출하는 코드가 묵시적으로 포함되어 있어,Parent()
으로 이동.
•••
3️⃣this(5000)
는Child(5000)
과 동일, 인수를 5000으로 전달하므로Child(int x)
를 호출.
4️⃣this.x = x
는Child.x = x
와 동일하므로Child.x
에x
의 값 5000을 저장.
5️⃣System.out.println(c.getX());
구문에 의해c.getX()
메소드를 호출하여 반환받은 값을 출력.
Parent()
와Parent(int x)
는 메소드의 이름이 같지만 '인수를 받은 자료형'이 다르므로 서로 다른 메소드이다. 이렇게 이름은 같지만 인수를 받는 자료형이나 개수를 딜리하여 여러 기능을 정의하는 것을 오버로딩(Overloading)이라고 한다.
참고,
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023.
https://newbt.kr/시험/정보처리기사%20실기/2023년%201회/오소프트0506