모바일 오유 바로가기
http://m.todayhumor.co.kr
분류
게시판
베스트
베스트오브베스트
베스트
오늘의베스트
유머
유머자료
유머글
이야기
자유
고민
연애
결혼생활
좋은글
자랑
공포
멘붕
사이다
꿈
똥
군대
밀리터리
미스터리
술한잔
오늘있잖아요
투표인증
새해
이슈
시사
시사아카이브
사회면
사건사고
생활
패션
패션착샷
아동패션착샷
뷰티
인테리어
DIY
요리
커피&차
육아
법률
동물
책
지식
취업정보
식물
다이어트
의료
영어
맛집
추천사이트
해외직구
취미
사진
사진강좌
카메라
만화
애니메이션
포니
자전거
자동차
여행
바이크
민물낚시
바다낚시
장난감
그림판
학술
경제
역사
예술
과학
철학
심리학
방송연예
연예
음악
음악찾기
악기
음향기기
영화
다큐멘터리
국내드라마
해외드라마
예능
팟케스트
방송프로그램
무한도전
더지니어스
개그콘서트
런닝맨
나가수
디지털
컴퓨터
프로그래머
IT
안티바이러스
애플
안드로이드
스마트폰
윈도우폰
심비안
스포츠
스포츠
축구
야구
농구
바둑
야구팀
삼성
두산
NC
넥센
한화
SK
기아
롯데
LG
KT
메이저리그
일본프로야구리그
게임1
플래시게임
게임토론방
엑스박스
플레이스테이션
닌텐도
모바일게임
게임2
던전앤파이터
롤
마비노기
마비노기영웅전
하스스톤
히어로즈오브더스톰
gta5
디아블로
디아블로2
피파온라인2
피파온라인3
워크래프트
월드오브워크래프트
밀리언아서
월드오브탱크
블레이드앤소울
검은사막
스타크래프트
스타크래프트2
베틀필드3
마인크래프트
데이즈
문명
서든어택
테라
아이온
심시티5
프리스타일풋볼
스페셜포스
사이퍼즈
도타2
메이플스토리1
메이플스토리2
오버워치
오버워치그룹모집
포켓몬고
파이널판타지14
배틀그라운드
기타
종교
단어장
자료창고
운영
공지사항
오유운영
게시판신청
보류
임시게시판
메르스
세월호
원전사고
2016리오올림픽
2018평창올림픽
코로나19
2020도쿄올림픽
제목
이름
회원가입
ID찾기
PASS찾기
게시판찾기
×
kre29
님에 대한 회원메모
회원메모는 메모 작성자 본인만 볼 수 있습니다.
확인
오유인페이지
개인차단 상태
kre29
님의
개인페이지입니다
회원메모
가입 :
13-11-06
방문 :
780회
닉네임변경 이력
일반게시판
베스트게시판
베스트오브베스트
댓글목록
회원차단
회원차단해제
kre29
님의 댓글입니다.
전체선택
번호
제목
댓글날짜
추천/비공감
삭제
905
재귀함수 이해하기 참 어렵네요
[새창]
2018-09-01 01:26:18
0
삭제
재귀함수의 경우 가장 자주 등장하는 예제가 팩토리얼이죠,
factorial이라는 함수가 있을 때, 해당 함수는 아래와 같이 구현됩니다.(자바스크립트를 기준으로 작성하였습니다.)
function factorial(number) {
if(number == 1) {
return 1;
}
var returnedFactorial = factorial(number-1);
return number * returnedFactorial ;
}
그럼 위의 함수의 동작방식을 이해해보죠.
먼저 5!(5 * 4 * 3 * 2 * 1)의 경우, factorial(5); 로 실행할 수 있습니다.
그럼 아래와 같은 형태로 작동됩니다.
factorial( (number=5) ) {
// number=5 이므로, if문은 false(실행안함)
var returnedFactorial = factorial( (number=4) ) { // 여기서 다음 factorial 함수 호출
// number=4 이므로, if문은 false(실행안함)
var returnedFactorial = factorial( (number=3) ) { // 여기서 다음 factorial 함수 호출
// number=3 이므로, if문은 false(실행안함)
var returnedFactorial = factorial( (number=2) ) { // 여기서 다음 factorial 함수 호출
// number=2 이므로, if문은 false(실행안함)
var returnedFactorial = factorial( (number=4) ) { // 여기서 다음 factorial 함수 호출
// number=1 이므로, if문은 true(실행)
if(number == 1) {
return 1;
}
// 위의 if문이 true이므로 return 1;을 하게 되어 하단의 코드는 무시됨.
// var returnedFactorial = factorial(number-1);
// return number * returnedFactorial ;
}
return number * returnedFactorial ;
}
return number * returnedFactorial ;
}
return number * returnedFactorial ;
}
return number * returnedFactorial ;
}
한글로 풀어보자면, factorial에 파라미터로 전달된 number가 1이 되기 전까지는 factorial(number-1)을 계속 호출합니다.
1이 되면 return 1;을 만나서 재귀가 종료됩니다.
그러므로 재귀함수에서는 기본적으로 return 문이 2개 이상 존재해야 정상 작동됩니다.(재귀된 값을 리턴하는 리턴문과, 재귀 자체를 종료하는 리턴문)
또한 factorial(5)를 호출하면, factorial(5)의 재귀로 인해 factorial(4)가 호출되는 이런 형태로 진행이 되는데,
이 경우, factorial(5)는 factorial(4)가 종료될 때 까지 함수가 종료되지 않고 메모리에서 대기합니다.
마찬가지로 factorial(4)는 factorial(3)을 기다리고, 결국 마지막 factorial(1)이 실행되어 return 1;을 실행하기 직전에는 메모리 사용량이 최대가 되는거죠.
위와같은 이유로, 재귀함수는 잘못사용하게 되면 메모리를 잡아먹는데 큰 일조를 할 수 있습니다.
용도에 맞게 사용되어야 하며 factorial 또한 재귀가 아닌 방법으로 구현할 수 있으므로 실무에서는 크게 사용될 일이 적을 것이라고 보여집니다.
저의 경우에는 웹에서 다단계 메뉴 구조를 "생성"할 때 재귀를 통해 구현을 하고, 해당 결과 값을 html로 출력한 뒤, 해당 값을 사용자에게 출력하는 방식으로 사용합니다.
이렇게 사용하면, 메뉴 구조를 변경하는 경우(자주 일어나지 않으며, 관리자가 주로 변경)에만 재귀함수를 호출하기 때문에 사용자로 하여금 재귀함수의 문제인 메모리 이슈(속도 저하) 등을 겪지 않게 되는거죠.
904
광주 맘충사건 결국은 보배가 다 파헤치네요.
[새창]
2018-07-07 13:56:09
0
/
4
삭제
지역감정과는 별개의 이야깁니다.
이러한 사항에서 정보 전달에 누락이 있으면 당연히 문제가 되는게 맞다고 보구요.
출처 경로만 보더라도 경기 광주로 되어있는데, 삼남매빠덜님의 말씀하신대로라면 본 글의 작성자님도 광주 비하를 하기 위해서 일부러 줄여 썼을 수도 있다는 이야기가 되겠네요?
지금 상황에선 지역이 문제가 아니다, 라고만 생각하지 마시고 정보 전달의 오류로 인해 파생될 수 있는 일까지 생각해주세요.
지역을 표기안함으로써 문제가 안될것같았으면 뉴스 등지에서도 그냥 대한민국에 맘충사건이 생겼다고 하면 되는거 아닌가요?
903
광주 맘충사건 결국은 보배가 다 파헤치네요.
[새창]
2018-07-06 21:56:44
1
/
26
삭제
제목보고 광주라고 써져있어서 뭐지 하고 와서 링크 타고 가니 경기광주네요.
혼동 없게 입력해주세요;
902
쉽게 단검을 만드는 방법
[새창]
2018-05-08 23:05:25
1
삭제
.
901
html5 라디오 버튼이 안 눌리는 이유..?
[새창]
2018-03-28 16:18:20
0
삭제
웹표준에서 감싸도 상관 없다고 나와있습니다.
900
할인중인 블랙박스가 있는데 괜찮은건가요?
[새창]
2018-02-14 13:36:11
0
삭제
제가 생각중인건 상품 2번이며,
오픈마켓 가격 약 33만원 할인가 20만 9천원(출장장착 포함)입니다.
899
(때때로 후방확인) 여러분들이 뭘 좋아하는지 몰라 58탄 (모바일 주의)
[새창]
2018-02-12 10:18:14
1
삭제
.
898
본삭금) java 메소드 질문좀 드릴게요 (왕왕초보 주의)
[새창]
2017-12-26 14:28:31
0
삭제
class Car{
void run(){
System.out.println("차가 달립니다.");
}
void break() {
System.out.println("차가 멈춥니다.");
}
}
class Benz extends Car {
@Override
void run(){
System.out.println("차가 빠르게 달립니다.");
}
void turnOnMusic() {
System.out.println("음악이 나옵니다");
}
}
Car car = new Car();
car.run(); // 차가 달립니다.
car.break(); // 차가 멈춥니다.
Benz benz = new Benz();
benz.run(); // 차가 빠르게 달립니다.
benz.break(); //차가 멈춥니다.
benz.turnOnMusic(); //음악이 나옵니다.
Car benz2 = new Benz();
benz.run(); //차가 빠르게 달립니다.
benz.break(); //차가 멈춥니다.
benz.turnOnMusic(); //Error
897
스프링 쓰시는 분들께 질문 있습니다ㄹ
[새창]
2017-12-01 17:47:19
0
삭제
삼치구이님의 댓글에 덧붙여서 쉽게 설명해보자면 A a = new A();를 했을 때 a 변수에 저장되는건 새로 생성된 인스턴스가 아닌 인스턴스의 주소 값이 저장됩니다.
그리고 이 주소 값을 매개변수로 하여 메서드를 실행했을 때도 주소 값을 전송하는 것 이므로, 어디서 접근하던지 수정되는 값은 모두 동일한 위치에 있는 값입니다.
clone() 메서드를 통해서 새로운 인스턴스를 복사해야 원하시는대로 이루어지며, 이러한 방식보다는 위에서의 "A am = a;" 부분을 "A am = new A(); am.setProperty(property);"으로 바꾸거나, A am = new A(); 대신 am.clone()을 사용하시면 되겠습니다.
896
mysql 성능이 너무 안나와서.. 질문좀 드리겠습니다!!
[새창]
2017-11-30 16:12:29
0
삭제
"카테고리, 타겟, 태그는 enum 같은 정해진 몇개의 텍스트 "
- 정해진 몇개의 텍스트라면 varchar를 사용하시는 편이 검색이 빠르던 것으로 알고있습니다.
"
select *
from fr_hit
where
hitter=2 and
category="community" and
tag="inbox" and
target=744
"
이 부분을 한개당 0.3초라고 하신 것 같은데, mysql 입장에서는 조금 다릅니다.
1. hitter가 2인것을 모든 행에서 찾고,
2. category가 community인것을 (1)을 찾은 모든 행에서 찾고,
3. tag가 inbox인 것을 (2)를 찾은 모든 행에서 찾고,
4. target이 fr_test.id와 같은것을 (3)을 찾은 모든행에서 찾는
위와 같은 형태로 돌아갑니다.
데이터에 따라 튜닝 형태가 달라지겠지만, 기본적으로 검색할 때는 가장 검색자료가 적은 것 (이름, 나이, 주민등록번호 열이 있다면 주민등록번호, 이름, 나이 순으로 검색.)부터 넣어야 하고, 다른 테이블과의 비교가 필요없는 경우에는 on이 아닌 where 절에 넣어 검색하는게 맞습니다.
데이터를 가지고 테스트 해볼 수 없어서 이 정도밖에 말씀드리지 못할 것 같습니다.
895
주차 하다가 실수로 다른 차량을 긁었네요 ㅠㅠ
[새창]
2017-10-31 17:19:11
0
삭제
아직 결과는 잘 모르겠지만 차주 분께서 점잖아 보이시는 어르신이고, 싸게 할 수 있는 곳 알아보시겠다고 말씀해주셔서 조금은 안심하고 있습니다.
물론 금액이 어떻게 나올진 모르겠지만요 ㅠ
894
주차 하다가 실수로 다른 차량을 긁었네요 ㅠㅠ
[새창]
2017-10-31 17:18:20
0
삭제
차량 수리 어플이 있어서 한번 가견적 받아보니 20정도 나와서 그 정도로 생각하고 있습니다.
답변 감사합니다!
893
개발, 특히 소프트웨어 디자인쪽에 대해 질문이 있습니다.
[새창]
2017-10-20 15:39:15
1
삭제
UML을 현업에서 쓰고 있으며, 정말 필요하다고 생각합니다.
개발자로서 가장 중요한 부분이 고객과의 커뮤니케이션 그리고 개발자간의 커뮤니케이션이라고 생각하는데,
고객과의 커뮤니케이션을 위해 요구분석서, 스토리보드 등이 필요한 것처럼,
개발자들끼리 확실한 의미 전달을 위해 사용하는게 UML입니다.
현업이든 어디서든 여럿이서 개발하다 보면 같은 생각이라고 시작했지만 결과적으로 서로 다른 생각이였어서 실패하는 경우가 많습니다.
892
스프링에서 컨트롤러, 서비스, DAO 구현이 모호합니다.
[새창]
2017-08-30 18:30:06
0
삭제
// AuthService
public HashMap<String, Object> login(MemberVo memberVo) throws Exception {
MemberVo resultVo = memberDao.selectOne(memberVo);
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("memberVo", resultVo);
if(resultVo == null) {
throw new Exception("아이디 혹은 비밀번호가 맞지 않습니다.");
}
if(!memberService.checkHashedPassword(resultVo.getPassword(), memberVo.getPassword())) {
//아이디 혹은 비밀번호가 맞지 않다는 메시지를 나타내는 이유는 사용자에게 아이디가 존재하는지 알리지 않기 위함.
throw new Exception("아이디 혹은 비밀번호가 맞지 않습니다.");
}
TimestampUtil timestampUtil = new TimestampUtil();
timestampUtil.setFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
if(resultVo.getBlockDate() != null) {
timestampUtil.setTimestamp(resultVo.getBlockDate());
String blockDate = timestampUtil.getFormatDate();
throw new Exception(resultVo.getId() + " 회원님은 " + blockDate + "에 차단되셨습니다.");
}
if(resultVo.getLeaveDate() != null) {
timestampUtil.setTimestamp(resultVo.getLeaveDate());
String leaveDate = timestampUtil.getFormatDate();
throw new Exception(resultVo.getId() + " 회원님은 " + leaveDate + "에 회원탈퇴를 하셨습니다.");
}
if(resultVo.getEmailCertifyDate() == null) {
System.err.println("warning: 회원 로그인 시 이메일 인증이 없으면 출력, 회원 이메일을 다시 적을 수 있는 페이지 제작해야 함.");
hashMap.put("state", IAuthService.NO_EMAIL_CERTIFY);
return hashMap;
}
System.err.println("warning: 비밀번호 5회 이상 틀릴 경우 비밀번호 찾기 필요");
timestampUtil = new TimestampUtil();
Timestamp today = timestampUtil.getTimestamp();
memberVo.setLoginDate(today);
memberDao.update(memberVo);
setAuthMember(memberVo); //세션에 memberVo 추가.(로그인
return hashMap;
}
891
스프링에서 컨트롤러, 서비스, DAO 구현이 모호합니다.
[새창]
2017-08-30 18:29:44
0
삭제
//AuthController
@RequestMapping(value="/login/check", method=RequestMethod.POST)
public String loginCheck(MemberVo memberVo, String token, Model model) throws Exception {
securityService.checkToken(token);
HashMap<String, Object> hashMap = authService.login(memberVo);
MemberVo resultVo = (MemberVo) hashMap.get("memberVo");
Integer loginState = (Integer) hashMap.get("state");
if(loginState != null) {
if(loginState == IAuthService.NO_EMAIL_CERTIFY) { // 이메일이 인증되지 않았다면 이메일 인증 메일 변경 및 재전송
model.addAttribute("msg", resultVo.getEmail() + "메일로 메일인증을 받으셔야 로그인 가능합니다.n다른 메일주소로 변경하여 인증하시려면 확인을 클릭하시기 바랍니다.");
model.addAttribute("redirect", "member/change/email?id=" + resultVo.getId() + "&token=" + securityService.getToken());
model.addAttribute("redirectCancle", "");
return "message/confirmReplace";
}
}
return "redirect:/";
}
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[다음10개▶]