A의 포인터,Reference를 사용하며 A클래스의 메소드에 virtual을 사용하게 되면
자식클래스들은 모두 영향을 받는다.
즉, 가장 상위클래스의 virtual이 되면 밑에 클래스 모든 메소드도 virtual로 인식되게 된다.
상위클래스에만 있어도 되지만 형식적으로 자식클래스에도 virtual을 사용해놓는다.
오버라이딩한걸 인식하기 위해서 이다.
virtual 키워드는 스택처럼 차곡차곡 쌓는게 아닌 테이블을 찾는 과정이다.
찾아가는 과정이 있기에 속도가 느리다.
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
virtual void print() {
cout << "A" << endl;
}
};
class B : public A
{
public:
void print() {
cout << "B" << endl;
}
};
class C : public B
{
public:
void print() {
cout << "C" << endl;
}
};
class D : public C
{
public:
void print() {
cout << "D" << endl;
}
};
int main()
{
A a;
B b;
C c;
D d;
//포인터도 사용가능
//가장 상위클래스에 virtual이 선언되어 있으면 모두 영향 받는다.
A &ref = c;
ref.print();
return 0;
}
“지구상의 모든 사람이 아인슈타인처럼 될 수 있는 잠재력이 있다는 말이 아니다.중요한 것은, 재능이 운명인 듯 보일지라도, 사실 어떤 스킬을 습득하고 향상시킬지 결정할 수 있는 권한은 상당 부분 우리에게 있다는 점이다. 우리 각자의 잠재력은 생각보다 크다." 탤런트 코드
호날두, 메시처럼 아인슈타인도 천재였는데 그의 뇌를 조사해보니
미엘린을 생산하고 유지하는 역할을 하는 아교 세포가 일반인의 두 배였다고 한다.
호날두, 메시 같은 사람들은 정말 엄청난 사람이지만
그들처럼 아교 세포를 늘리는 방법은 없겠지만
우리는 꾸준한 연습으로 우리 분야에 특별한 사람이 될 수 있다!
그런데 여기서 말한 꾸준한 연습이란 무엇일까? 아니 연습이란 무엇일까?
책에선점화와 심층 연습이란말이 나온다.
적절한 점화와 자신의 능력보다 약간 뛰어넘는 것을 심층 연습하고
실수를 인정하고 실수를 천천히 고쳐가며 발전하면
미엘인 층은 한 겹 한 겹 쌓여간다는 것이다.
나는 매번 인터넷 강의를 결제하고 완강한 적이 있었던가?
매번 결심하고 작심삼일인 경우가 많지 않았나?
생각해보면 적절한 점화와 체계적인 연습을 구성하지 않았었다.
적절한 점화, 심층 연습은 환경설정에 영향이 크다고 나온다.
왜 천재들은 한곳에 몰려서 태어날까? 다들 유전자가 뛰어나서라고
생각하지만 아니다. 아래 내용은 책 내용 일부분이다.
브라질 축구를 예로 들면 자신의 나라에선 호나우지뉴, 카카가 배출되었고
풋살 하는 문화가 발전하여 다른 나라 사람들보다 공을 만지고
연습할 수 있는 기회가 많아진다면 당연히 더 좋은 선수들이 나오지 않을까?
또, 박세리가 우승할 때 그걸 지켜본 아이들이 지금 LPGA를 휩쓸고 있다면?
이런 것도 점화이다. 우리나라 사람들이 모두 골프를 잘 치는 유전자를 가지고 있지 않는 걸 우린 알고 있지 않은가?
“함께 세계를 창조하고 그것에 대한 글을 공동으로 완성해내는 창의적인 활동은 어린 작가들에게 상당한 즐거움을 주었다. 그것은 훌륭한 놀이였다. 이 놀이에 참여하는 모든 사람은 다른 사람이 쓴 것을 열심히 흡수했고 반응을 보였다.” 마이클 하우
위에 글은 브론테 자매(유명한 소설가)에 관한 마이클 하우 박사의 말이다.
또, 같은 꿈을 가진 사람들이 모이면 주변 사람들도
브론테 자매가 같이 연습하면서 성장했던 것처럼건전한 자극을 받아 조금 더 발전할 수 있지 않을까?
위에서 말한 멘토링 프로젝트에 들어가서 워크숍을 다녀왔는데
나에게 개발에 관한 점화장치가 된 것 같다.
이젠 심층 연습할 방법을 생각해 매우 매우 발전해보아야겠다!
뒷부분엔 스승에 관한 이야기가 나오는데 천재들의 스승은
다 엄청난 스승일 거 같지만 조사해보면 엄청난, 보통, 별로 세 가지 중 보통이 많다고 한다.
여기서 반전은 교육적으론 보통일지 모르지만,
그 스승들은 대부분 제자들에게 관심을 가지고 제자들에게 맞춤으로 연습을 시켜주고
또 적절한 자극으로 점화를 시켜준다고 한다.
나중에 교육도 해보고 싶은데 위에 스승의 모습을 잊지 말고 있어야겠다.
마지막으로 책에서 자극받은 구절이다.
“다른 학교에서는 부드러운 방법이 효과가 있을지도 모릅니다. 하지만 우리에겐 말 그대로 낭비할 시간이 없습니다.우리 아이들은 뒤처진 채 시작했습니다. 우리는 아이들이 가속도를 얻어 앞서가도록 만들어줘야 합니다. 풋볼 경기로 치면 4쿼터 같은 거죠. 우리는 터치다운을 당했어요. 지금 당장 공격을 시작해서 점수를 내야 합니다.” 탤런트 코드
JetBrains 홈페이지 접속 Tool Box App을 다운받아서 여러 IDE 설치를 권장한다.
Intellij IDEA Ultimate 는 유료지만 자바스크립트,스프링,서블릿을 사용할 수 있다.
프로젝트 생성하기
GroupID : 프로젝트 그룹을 이야기한다.(스프링) ArtifactID : 프로젝트 그룹의 하위 모듈(스프링 시큐리티,MVC)
메인메소드 생성하고 실행하기
파일생성 : command + n ,Alt+insert 메인메소드 : psvm System.out.println() : sout 실행환경 실행 현재 : 맥 Ctrl + Shift + R 윈도우 Ctrl + Shift + f10 실행환경 실행 이전 : 맥 Ctrl + R 윈도우 Shift + f10
요 근래 스스로 발전하고 싶은 욕구가 많아졌는데 방법을 모른다는 핑계로 미루고 있었다. 사람이 참 핑계는 찾기가 쉽다고 느낀다....
"목표를 이우려 말고 정체성을 찾자"
위에 글이 책에서 설명하는 주제인데 너무 공감됐다. 외적인 요인으로 발전하려고 하기보단 자기자신의 정체성, 꿈을 가지고 자발적으로 조금씩 발전해가는 것이다.
그렇다면, 정체성을 어떻게 만들어가야할까?
정체성은 작은 습관이 모여서 만들어진다. 작은 습관을 쉽게 만드는 방법은 새로 만들기보단 늘 하던 습관에 긍정적인 습관을 추가해보자.
아침에 일어나는 루틴에 푸쉬업을 추가한다든지 이런 방법 말이다.
정체성, 꿈을 가지고 작은 습관들을 만들어가자. 무엇보다도 정체성, 꿈이 큰 동기유발을 해주기에 정체성, 꿈은 직업이 되면 안 된다.
개발을 잘하고 싶고 무언가를 만들어가고 싶은게 꿈이 여야지 카카오, 네이버에 들어가는 게 꿈이 되면 안 된다. 동기유발은 나쁜습관을 이기게 해 주는데 카카오, 네이버에 들어가는 게 꿈이라면 이루었다면 꿈은 없어진다.
또 정체성을 이루어가는 작은 습관은 바로바로 결과가 돌아오지 않는다. 공부를 한다고 바로 티가 나지 않는것 처럼 하지만 능력은 차곡차곡 쌓여가고 있다.
그렇기에 정체성을 이루어가는 습관도 약간의 보상이 있어야 이루어가는 재미가 생긴다. 일주일 동안 운동을 잘하면 먹고 싶은걸 먹는 이런 보상들 말이다 ㅎㅎ 그리고 완벽하려고하면 안 된다. 완벽은 사실상 불가능하기 때문이다. 완벽하기보단 올바르게 고쳐가는게 좋지 않을까 싶다.
또 정체성,꿈을 만들어가는 쉬운 방법은 그런 사람들과 어울리면 된다. 개발을 공부하는 모임,독서모임등에 들면 더 쉽게 접할 수 있지 않을까?
다만, 정체성이 하나이고 그게 전부가 되면 안 된다. 꼰대가 된다. 우리 주변의 올바른 꼰대들을 생각해보자 ㅎㅎ
"처음의 실수가 절대 나를 망치지는 않는다. 하지만 뒤이어 또 실수할 수 있다. 한 번 거르는 것은 사고다. 두번 거르는 것은 새로운 습관의 시작이다."
좋은 습관을 유지하려면 반복의 중요성을 기억해야 한다. 반복을 하려면 하기 쉬워야하고 또, 조금씩 성취를 늘려야 한다.
한 번은 실수지만 두 번은 실수가 아닌 새로운 습관의 시작이다. 캬 얼마나 맞는말인가 뼈를 맞는 기분이다. 그래서 내가 나쁜습관밖에없구나 지금은 ㅎㅎ
나쁜 습관을 없애기는 힘드니 멀리하자 멀리하는 방법은? 나쁜 습관을 접하지 않는 환경을 만드는 거다. 이건 많은 고민을 해봐야겠다..
N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성해보자.
예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력 한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 뒤집는 함수인 int reverse(int x) 와 소수인지를 확인하는 함수 bool isPrime(int x)를 반드시 작성하여 프로그래밍 한다.
힌트 : 숫자 뒤집는 방법생각하기
소수란? 나눠지는 수가 없는 숫자를 말한다.
#include <stdio.h>
int reverse(int x){
int res = 0;
while(x>0){
int tmp = x%10;
res = res*10 +tmp;
x= x/10;
}
return res;
}
bool isPrime(int x){
int i;
bool flag = true;
if(x ==1){
return false;
}
for(i = 2; i < x; i++){
if(x%i ==0){
flag=false;
break;
}
}
return flag;
}
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
int n, num, i, tmp;
scanf("%d",&n);
for(i = 1; i<=n;i++){
scanf("%d",&num);
tmp = reverse(num);
if(isPrime(tmp)){
printf("%d ", tmp);
}
}
return 0;
}
각 자연수의 자릿수의 합을 구하는 함수를 int digit_sum(int x)로 작성하자.
입력 값 txt파일
맨처음숫자 3은 데이터의 수를 표현해준다.
3
125 15232 97
힌트 : 버퍼에는 줄바꿈 띄어쓰기 기준으로 들어간다.
자릿수의 합을 구하는 방법을 한번 생각해보자.
#include <stdio.h>
using namespace std;
int digit_sum(int x){
int sum = 0, tmp;
while(x>0){
tmp = x%10;
sum=sum+tmp;
x=x/10;
}
return sum;
}
int main(int argc, char** argv) {
freopen("input.txt", "rt", stdin);
int n, num, i, sum, max = -2147000000, res;
scanf("%d",&n);
for(int i = 0; i <n; i++){
scanf("%d",&num);
sum = digit_sum(num);
if(sum > max){
max = sum;
res = num;
}
}
printf("%d\n",res);
return 0;
}