장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
-
[JAVA] 이것이 자바다(3판) 7장 상속 확인문제 답안0423분6. Parent 클래스를 상속해서 Child 클래스를 다음과 같이 작성했는데, Child 생성자에서 컴파일 에러가 발생했습니다. 그 이유와 해결 방법을 설명해보세요.public class Parent { public String name; // 매개변수가 있는 생성자 public Parent(String name) { this.name = name; }}public class Child extends Parent { public int studentNo; public Child(String name, int studentNo) { this.name = name; this.studentNo = studentNo; }..
-
2025.04.22 금융뉴스 읽기0422분#관세관세 전쟁에 미국 현지 생산으로 수출 약화 보완 달러가치 3년 만 최저, 달러 예금 늘고 안전성 자산인 금값 상승#내수악화법카 한도 줄이고, 기업 고용 감소 - 내수 악화 악순환상환기한 넘긴 은행권의 중소기업 대출 급증 - 은행권 건전성 리스크#영올드 퇴직연금 쟁탈전고수익 추구 상품을 찾아 보험업권에서 은행, 증권사로 이탈하는 퇴직연금 달러가치 3년 만에 최저로 뚝 안전자산 금은 3400달러 뚫어트럼프의 '파월 해임 위협' 후폭풍 "Fed 흔들면 달러 신뢰 훼손" 우려미 국채금리 오르고 증시도 요동미국 달러화 가치가 장중 3년래 최저 수준으로 떨어지며 투자 피난처로 금값은 처음으로 3400달러 선을 넘어섰다. 오스턴 굴스비 미국 시카고 연방준비은행 총재는 20일 CBS 방송에서 "(중앙은행)의 통화..
-
[Node.js][MongoDB] MVC 모델의 Controller 작성하기0421분*Node.js 프로그래밍 입문(고경희)를 읽고 작성한 글입니다. Design Architecture코드 관리를 편리하게 하기 위해 기능이나 역할에 따라 여러 파일로 나눈 뒤 연결해 사용하는 개념 백엔드는 주로 MVC 패턴 이용백엔드는 API 개발이라고도 볼 수 있는데, 이 API를 애플리케이션으로 만들려면 인터페이스(UI)가 필요하다. { UI: View, API: Controller, DB: Model }모델과 뷰는 컨트롤러를 통해서만 정보 전달이 일어나므로 뷰와 모델은 완전히 분리된다.브라우저가 POST를 통해 자료를 만들때도 컨트롤러를 거쳐 DB에 값을 저장하고, DB에서 값을 가져와 브라우저 화면에 출력할 때도 컨트롤러를 거쳐 모델에서 뷰로 정보가 이동한다. 영역역할설명ModelDB와 연결해 데..
-
MVC 모델에서 모델[MongoDB]과 컨트롤러 연결하기0421분*Node.js 프로그래밍 입문(고경희)를 읽고 작성한 글입니다. 몽고DB : 분산형 NoSQL DB로 JSON 형식을 이용해 문서에 자료 저장.Collection: 여러 개의 도큐먼트로 구성된 자료 저장 방식Document : 자료 저장한 문서여러 연락처를 담은 컬렉션과 연락처 각각을 담은 도큐먼트로 구성MongoDB Atlas : 클라우드에서 데이터베이스 관리하는 툴Shared: 무료 Serverless: 사용량에 따라 비용 부과Dedicated: 매달 일정 금액 지불클러스터: 여러 데이터베이스 서버를 연결해 놓은 서버 그룹 추가 설치 Mongoose module : DB 접속과 관리 명령 제공dotenv package: 환경 변수 설정용 .env환경 변수란 메모리 주소나 비밀번호처럼 애플리케이션마..
-
[빅분기 필기] 빅데이터분석기사 필기 후기0418분ADsP랑 겹치는 내용이 꽤 있는 빅데이터분석기사.그런데 왜인지 다시 공부하려니까 양이 너무 많아보였어요. 개념들이 생소해졌달까요. 제 앞선 자격증 후기 글을 읽어보신 분들이라면 저는 문제 풀면서 개념을 익히는 스타일이라는 것을 아실텐데요. 빅분기 필기는 모의고사 찾기가 어렵더라구요. 그렇다고 책 돈주고 사긴 아까워서 열심히 찾아다녔습니다. 제 서치 실력 기준 유일한(?) cbt 를 제공하는 감사한 사이트입니다. 문제가 좀 심하게 지엽적이라 풀면서 스트레스 많이 받았어요. 덕분에 합격했네요.. 이기적 CBT, 영진닷컴빅데이터분석 기사 필기 답안 표기란 과목명 문항수 합격점수 1 과목 빅데이터 분석기획 20개 60점 2 과목 빅데이터 탐색 20개 60점 3 과목 빅데이터 모델링 20개 60점 4 과목 ..
-
2025.04.16 금융신문 읽기0418분日, IB 인수해 美기업금융 올인…韓은 글로벌 PF특수 놓칠 판(심우일 기자, 서울경제, 2025-04-16)" [우물 안 韓금융…해외 영업익 비중 11%] 리테일 아닌 기업대출 주력한 일본, 미국 내 자산 한국은행의 23배 달해한국은 동남아 소매금융 의존 과도, 해외PF 경험도 적어 '그림의 떡', "선진국 진출 필요-핀테크도 활용" "일본 은행이 주요국 진출을 확대하면서 관세전쟁 후 자국 기업을 지원하는 역량(PF 등)이 한국 은행과 크게 차이난다는 점을 문제 삼았다.국가특징전략일본낮은 국내 조달금리와 막강한 자본력- 파트너사와 협력하거나 중소형 IB를 인수해 기업금융에 올인하는 전략- 해외 핀테크 적극 진출 (필리핀: 글로브 핀테크, 미국: 제니우스 뱅크)대한민국 지난해 역대 최대 실적 달성동남아 ..
-
[정보처리기사] 기출문제를 많이 풀어보세요0418분정보처리기사는 IT 업계 취업 희망한다면 가장 먼저 접해볼 자격증이 아닐까 싶은데요.컴퓨터에 관한 필수 지식을 습득했다는 사실을 정보처리기사를 통해 증명할 수 있기 때문이라 생각해요.CS, OS, 네트워크, SW개발 등 컴퓨터공학과 전공 필수 커리큘럼과 거의 동일한 과목을 시험보는데요. 필기 공부방법저는 네트워크, 운영체제 학교 강의를 듣고, 에듀윌 책으로 독학하는 방식으로 공부했습니다. 주변에 노베로 정처기 도전하시는 분은 흥달쌤으로 따시더라구요. 저도 이해 안되는 부분은 흥달쌤 무료 강의보고 도움 많이 받았습니다. 실기 공부방법실기는 실제 코드 해석과 다양한 알고리즘, 함수 동작 방식을 알아야 풀이가 가능해서 비전공자에겐 진입장벽이 있을 것이라 느껴지는데요. 양이 워낙 방대해서 저는 에듀윌 책에 붙..
-
[ADsP] 최근엔 정처기급으로 쳐준다는 ADsP0418분컴공에서는 자격증보다는 프로젝트 경험이 더 중요하다고 생각하는 것도 이해가 되지만, 또 막상 자격증처럼 신뢰도 있는 실력 검증 방법을 찾기 어려운 것도 사실인 것 같아요. 난이도 대비 가산점이 높다는 ADsP. 제가 한 번 따보았는데요. Sql 시험보면 노랭이 사듯이 ADsP하면 이 책 다들 사는 것 같아요. 저도 친구책 빌려서 공부해썽요.데이터 분석 경험이 없으면 막막한 글자 암기 시험처럼 느껴질듯한데 그럴 땐 아래 유튜브를 참고해보세요. 시험은 걱정한 것보다 쉽게 나왔어요. 다들 화이팅 하세요! 차별점을 두고 싶다면 ADP까지 도전하는 것도 좋은 것 같아요.
-
[SQLD] 노랭이만 있으면 천하무적0418분관계형 데이터베이스를 다루는 언어 SQL, 찐컴공이 딸 만한 자격증에 탑 3에 드는 자격증이라고 생각해요.(근거빈약)공부방법은 꽤 단순합니다. 노랭이(개정판)을 푸시면 되는데요. 노랭이가 앞부분은 SQLD, 뒷부분은 SQLP를 다루기 때문에 두 시험을 다 커버할 수 있어요.제가 그냥 노랭이 존재만 알고 시험범위 확인을 안해서 어려운 것부터 공부하려고 SQLP 부분만 보고 SQLD 시험 친 적이 있어요. 결과는 아래와 같습니다. 노랭이 안 풀었을 때. 노랭이 풀었을 때. 흠냐 .. 노랭이 믿고 SQLP 신청해도 될까요??
6. Parent 클래스를 상속해서 Child 클래스를 다음과 같이 작성했는데, Child 생성자에서 컴파일 에러가 발생했습니다. 그 이유와 해결 방법을 설명해보세요.
public class Parent {
public String name;
// 매개변수가 있는 생성자
public Parent(String name) {
this.name = name;
}
}
public class Child extends Parent {
public int studentNo;
public Child(String name, int studentNo) {
this.name = name;
this.studentNo = studentNo;
}
}
부모 클래스에 기본 생성자가 없고 매개변수를 갖는 생성자만 있다면 자식 생성자 선언에 컴파일 에러가 난다.
자식 객체를 생성하면 부모 객체가 먼저 생성된 다음에 자식 객체가 생성된다. 코드로는 찾아볼 수 없지만 컴파일 과정에서 자동으로 부모 생성자를 호출하는 super();을 추가해서 부모 생성자를 실행한 후에 자식 생성자를 실행하게 된다.
public class SmartPhone extends Phone{
public SmartPhone(Strong model, int price){
// 컴파일러 자동 추가
super();
// 만약 부모 클래스 기본 생성자가 없다면
super(model, price);
this.model = model;
this.price = price;
}
}
문제 답안도 super(name); 으로 변경해야 한다.
7. Parent 클래스를 상속받아 Child 클래스를 다음과 같이 작성했습니다. ChildExample 클래스를 실행했을 때 호출되는 각 클래스의 생성자의 순서를 생각하면서 출력 결과를 작성해보세요.
public class Parent {
public String nation;
public Parent() {
this("대한민국");
System.out.println("Parent() call");
}
public Parent(String nation) {
this.nation = nation;
System.out.println("Parent(String nation) call");
}
}
public class Child extends Parent {
public String name;
public Child() {
this("홍길동");
System.out.println("Child() call");
}
public Child(String name) {
this.name = name;
System.out.println("Child(String name) call");
}
}
public class ChildExample {
public static void main(String[] args) {
Child child = new Child();
}
}
Java에서 this(...) 호출은 “같은 클래스 내의 다른 생성자를 실행하라”는 의미다. Parent() 생성자의 첫 줄이
this("대한민국");
이기 때문에, Parent()가 실행되기 직전에 동일 클래스인 Parent의 생성자가 호출되고 그 안의 코드가 먼저 수행된다.
public Parent(String nation) { … }
- new Parent() → Parent() 실행
- this("대한민국") 만나면 → Parent(String nation)으로 이동
- Parent(String nation)에서 "Parent(String nation) call" 출력
- Parent(String nation) 종료 후 → 다시 Parent()로 돌아와 "Parent() call" 출력
생성자 체이닝(constructor chaining)
즉, this("대한민국") 때문에 Parent() 내에서 Parent(String nation) 생성자로 제어가 넘어간다.
8. Tire 클래스를 상속받아 SnowTire 클래스를 작성했다. 출력 결과를 작성해보시오.
실제 문제는 자식 객체를 부모 클래스에 할당했을 때 부모 클래스(tire)의 run은 부모 메서드를 호출할지 자식 메서드를 호출할 지를 묻는 문제였다. 일반적으로는 부모는 자식을 모르기 때문에 자식 메서드를 사용할 수 없다.
tire의 Static type은 컴파일러가 부여한 Tire이지만, runtime type은 SnowTire이다. 자바 런타임에서는 참조변수의 runtime 객체를 확인하기 때문에 자식의 메서드가 호출된다.
에엥? tire.run()은 SnowTire의 메소드 영역에서 run을 찾게 된다는 말인가? 그럼 tire 가 SnowTire랑 동일한 메모리 번지를 갖는다는건가?
우선, 클래스는 static에 올라가고, 내부 변수인 tire은 stack 프레임으로 new SnowTire()을 가리킨다. 런타임에 tire는 SnowTire를 가리키고 있으니 Method Area에서 SnowTire 클래스에 있는 run() 오버라이드 메서드를 호출한다.
[ Stack ] [ Heap ] [ Method Area ]
변수, 참조 실제 객체 클래스, 메서드 정의
Tire tire ────┐ ┌────────────┐ ┌---------------------------┐
└─────▶│ SnowTire │──────▶ │ SnowTire.run() │
│ (상속받음) │ │ Tire.run() │
└────────────┘ └---------------------------┘
그럼 이제 문제를 봐보자.
public class SnowTireExample {
public static void main(String[] args) {
SnowTire snowTire = new SnowTire();
Tire tire = snowTire; //자동 타입 변환
snowTire.run();
tire.run();
// instanceof 이해가 잘되지 않아 추가해본 부분
if (snowTire instanceof Tire) {
System.out.println("snowTire is instance of Tire");
} else {
System.out.println("snowTire is not instance of Tire");
}
if (tire instanceof SnowTire) {
System.out.println("tire is instance of SnowTire");
} else {
System.out.println("tire is not instance of SnowTire");
}
}
}
답은 둘 다 자식 메서드를 호출한다.
- 자식 instanceof 부모객체 : 이건 항상 true
- 부모(자식객체할당) instanceof 자식객체 : 이건 왜 true지?
SnowTire snowTire = new SnowTire();
Tire tire = snowTire; // ← Stack에 Tire 타입 변수에 담았을 뿐, 가리키는 객체(Heap)는 SnowTire
// ① snowTire 변수에 담긴 실제 객체가 SnowTire
// → SnowTire는 Tire의 서브클래스이므로 instanceof Tire는 true
System.out.println(snowTire instanceof Tire); // true
// ② tire 변수에 담긴 실제 객체도 여전히 SnowTire
// → instanceof는 “객체가 해당 클래스 혹은 서브클래스인지”를 물으므로 역시 true
System.out.println(tire instanceof SnowTire); // true
instanceof는 변수의 선언된 타입이 아니라 실제 객체의 타입을 보고 판단하기 때문에 true가 나온다.
- 선언된 타입(Static Type): 컴파일러가 변수에 부여하는 타입
- 실제 객체 타입(Runtime Type): new SnowTire()로 생성된 진짜 클래스.
- 변수의 타입 ≠ 객체의 타입
- 변수 선언부(Tire tire)는 “이 변수로 호출할 수 있는 메서드”를 제한
- instanceof는 “그 변수에 들어있는 객체의 실제 타입”을 검사
- 객체는 한 번 생성되면 바뀌지 않는다
- new SnowTire()로 만든 객체는 언제나 SnowTire
- 부모 타입 변수에 담아도, 객체 자체가 Tire로 바뀌진 않는다
- instanceof 동작 원칙
- x instanceof A는
- x의 실제 클래스가 A이거나
- A의 서브클래스일 때만 true
- x instanceof A는
11. MainActivity의 onCreate()를 실행할 때 Activity의 onCreate()도 실행시키고 싶습니다. 밑줄(빈칸)에 들어갈 코드를 작성해보세요,
public class Activity {
public void onCreate() {
System.out.println("기본적인 실행 내용");
}
}
public class MainActivity extends Activity {
@Override
public void onCreate() {
( ).onCreate();
System.out.println("추가적인 실행 내용");
}
}
onCreate()는 인스턴스 메서드이므로 어떤 객체의 메서드를 실행할 지 명시해주어야 한다.
super.onCreate();
- super.onCreate(...)는 현재 this 객체의 부모(Activity) 구현을 호출하는 문법
- 반면 Activity.onCreate()처럼 클래스 이름으로 쓰는 건 정적(static) 호출 문법인데, onCreate는 static이 아니어서 문법 오류
'Computer Science > Object Oriented Programming' 카테고리의 다른 글
[Java] for 중첩 루프에서 continue가 어디까지 영향을 미치는지 (1) | 2025.05.30 |
---|---|
이것이 자바다(3판) 9장 익명객체 풀다가 new와 final을 이해하기 위해 JVM 메모리 동작 공부 (1) | 2025.04.25 |
[JAVA] 객체지향의 꽃: 클래스 (2) | 2025.04.17 |
[JAVA] 이것이 자바다(3판) 6장 20번 답안 (0) | 2025.04.17 |
[JAVA] 참조형 : 배열 초기화, 복사 (1) | 2025.04.16 |