카테고리

분류 전체보기 (68)
JAVA-기본 (7)
JAVA-AWT (24)
JAVA-클래스의 중요메소드 (23)
JAVA-람다식 (0)
Android Studio (7)
Python (1)
OpenCV (1)
AWS (0)
webrtc (0)
javascript (4)
처리방침 (1)
rss 아이콘 이미지
반응형

24년도 10월 16일에 구글 play스토어를 통해 내 인생의 세번째로 "메모리얼 카메라(MemorialCamera)" 앱을 출시했습니다. 독학으로 안드로이드 스튜디오를 공부를 하고 기획/개발/디자인 등 1인 개발을 진행하였고 매년 어플 1개를 출시를 목표로 하고있습니다. 23년도를 시작으로 24년도에는 2개를 출시하게 되었습니다.

 

매년 1개 출시를 목표였는데, 2개를 출시하게되어 엄청 뿌듯합니다. 이번 출시는 기다림의 시간이 길었습니다. 10월에 개발 완료하였으나 구글의 정책을 모두 처리하는데 많은 시간을 소요하였습니다ㅠㅠ 그래도 또 한번 출시에 성공하였습니다.

 

혹시, 어플에 버그나 개선사항이 있다면 언제든지 블로그 댓글 및 구글 play스토어의 댓글을 부탁드립니다.

많은 다운 부탁드립니다!!!

 

그러면 개발 후기를 시작하기전 어플 소개부터 간단히 표로 정리했습니다.

앱 이름 메모리얼 카메라(MemorialCamera)
앱 소개 갤러리에서 사진을 불러와서 투명도 조절을 통해 현재 Carame Preview의 배경으로 두고 비슷한 사진을 찍어보세요. (과거의 구도와 동일하게 찍을 수 있습니다.)
앱 기능 [기능 설명]
1. "사진 가져오기" - 갤러리에서 사진을 불러와 카메라의 미리보기 화면에 뒷 배경으로 사용할 수 있습니다.
2. "사진 찍기" - 카메라를 찍어 갤러리에 보관합니다.
3. "카메라 전환" - 카메라 전/후면 전환합니다.
4. "사진 회전" - 사진 가져오기를 통해 불러온 사진을 90도 회전합니다.
5. "투명도 조절" - 사진 가져오기를 통해 불러온 사진을 불투명도 조절합니다.
6. "licenseNotice" - 현재 사용된 기술의 라이선스를 표시합니다.
7. "3:4", "9:16", "1:1" - 불러온 사진의 비율을 조절합니다.
다운 받는 곳 <URL 검색>
https://play.google.com/store/apps/details?id=com.memorialCamera.memorialCamera


<구글 플레이 검색>
메모리얼 카메라(MemorialCamera)
관련 이미지
메인
화면

비율선택
화면

기획:

오늘날 스마트폰 카메라는 우리가 일상에서 쉽게 사진을 찍고, 소중한 순간을 기록할 수 있는 강력한 도구입니다. 그런데 때때로, 우리는 과거의 특정 순간을 다시 떠올리고 싶을 때가 있습니다. 예를 들어, 어린 시절의 사진이나 여행 중 찍었던 사진을 그대로 재현해보고 싶을 때, 어떻게 하면 좋을까요? 그런 생각에서 시작된 프로젝트가 바로 이 앱입니다.

 

이 앱은 사용자가 과거에 찍었던 사진을 불러와, 그 사진의 구도와 배경을 그대로 재현할 수 있는 기능을 제공합니다. 즉, 사용자는 과거의 사진을 참조한 후, 그 사진과 똑같은 위치에서 현재 카메라를 사용해 촬영할 수 있습니다. 하지만 이 앱의 가장 큰 차별점은 단순히 사진을 찍는 것을 넘어, 실제로 카메라 화면에 과거의 배경을 반영해 실시간으로 보여준다는 점입니다. 더욱이, 이 배경은 흑백으로 처리되어 과거의 느낌을 더욱 선명하게 전달할 수 있습니다.

 

기획과 기술적 도전

이 아이디어는 처음에는 가능할까?라는 의문에서 시작되었습니다. 안드로이드 카메라에 접근하여, 실시간으로 카메라 미리보기 화면에 배경을 그려야 했고, 그 배경을 흑백으로 처리해야 했기 때문에 기술적으로 상당한 도전이 있었습니다. 또한, 다양한 안드로이드 기기에서 사용될 수 있도록 화면 비율과 해상도 차이를 모두 고려해야 했습니다.

 

세 가지 기술적 과제를 해결하기 위해, 앱의 전반적인 구조와 흐름을 면밀히 분석하였고, 그 결과 이 아이디어는 실현 가능하다는 결론을 내렸습니다. 특히 중요한 점은, 화면 비율이 다른 기기에서도 동일한 경험을 제공할 수 있도록 유연하게 대응해야 한다는 것이었습니다. 이를 해결하기 위해 다양한 화면 비율을 자동으로 감지하고, 사용자에게 최적화된 화면을 제공하는 로직을 구현했습니다.

 

개발과 구현

앱 개발 과정에서 다양한 안드로이드 기술을 활용했습니다. 특히 화면 전환, 다중 화면 처리, 커스텀 다이얼로그(Custom Dialog), 그리고 광고 시스템인 AdMob을 적절히 결합하여 매우 효율적이고 빠른 개발을 진행할 수 있었습니다.

하지만 개발 과정에서 가장 큰 어려움은 흑백 처리와 관련된 문제였습니다. 처음에는 외부 모듈을 활용하려 했으나, 그 모듈을 적용한 후에는 예상대로 동작하지 않는 문제가 발생했습니다. 이에 따라 OpenCV를 사용하기로 결정을 내렸고, 이 과정에서 시간이 조금 소요되었지만, 결국 문제가 해결되었고, 앱의 핵심 기능인 실시간 흑백 배경 처리 기능을 성공적으로 구현할 수 있었습니다.

 

앱의 사용자 인터페이스(UI)는 직관적으로 디자인하여, 사용자가 과거의 사진을 손쉽게 불러올 수 있고, 그 사진을 바탕으로 현재의 사진을 찍을 수 있는 흐름을 간편하게 만들었습니다. 또한, 다양한 기능을 제공하여 사진 촬영 후에는 쉽게 비교할 수 있도록 하여, 과거와 현재를 비교하며 추억을 떠올릴 수 있는 소중한 경험을 제공합니다.

 

마치며

이 앱은 단순히 과거의 사진을 불러와 찍는 것 이상의 의미를 담고 있습니다. 우리가 잃어버린 시간, 지나간 순간들을 되돌아보며 그때의 느낌을 현재의 순간에 재현하는 과정에서, 사용자는 더 많은 감동과 추억을 느낄 수 있을 것입니다. 앞으로도 이 앱은 끊임없이 발전하며, 사용자들에게 더욱 많은 즐거움과 편리함을 제공할 것입니다.

 

첫 출시 이후 시간이 많이 지나서 출시 과정을 잊어버리는 등 시간은 소비되었지만 재활용 요소가 많아서 나름 빠르게 진행했습니다. 혹시, 저와 같이 앱을 출시하고 싶고 시작 단계에 있는 개발자분들 정말 포기하지 마시고 좋은 결과있으시길 바랍니다!  앱 개발하시는 분, 시작하시는 분 꼭 기획하신 앱이 있다면 출시하시기 바라며 응원합니다.

다음 출시 때 또 글로 찾아뵐게요. 글 읽어 주셔서 감사합니다!
많이 다운 부탁드립니다!!

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형
반응형

24년도 1월 3일에 구글 play스토어를 통해 내 인생의 두번째로 "Math Puzzle(수학 퍼즐)" 어플을 출시했습니다. 독학으로 안드로이드 스튜디오를 공부를 하고 기획/개발/디자인 등 1인 개발을 진행하였고 매년 어플 1개를 출시를 목표로 하고있습니다. 또 이렇게 목표를 이루니 기분이 좋네요!! 개인적으로 일정을 수립하여 개발을 진행했는데 계속 일정이 뒤쳐졌지만, 결국 또 한번 출시에 성공하였습니다. 혹시, 어플에 버그나 개선사항이 있다면 언제든지 블로그 댓글 및 구글 play스토어의 댓글을 부탁드립니다.

많은 다운 부탁드립니다!!!

 

그러면 개발 후기를 시작하기전 어플 소개부터 간단히 표로 정리했습니다.

앱 이름 Math Puzzle(수학 퍼즐)
앱 소개 수학 연산으로 결과값에 맞게 퍼즐을 조합하여 맞춤
- 퍼즐의 가로 세로의 연산을 맞추어 정답을 맞추면 점수를 획득하는데, 이를 위해 타일을 연산에 맞게 움직여야합니다.
앱 기능 정답을 맞출 경우 1점을 획득하고 10점이 되면 level이 증가하고 총 level1~level3까지 존재합니다.
다운 받는 곳 <URL 검색>
https://play.google.com/store/apps/details?id=myapp.mathpuzzle


<구글 플레이 검색>
Math Puzzle(수학 퍼즐)
관련 이미지
레이아웃1
(메인화면)
메인화면: 게임을 start하는 메인 페이지

레이아웃2
(게임화면)
게임화면: 터치하여 타일을 움직이는 게임 페이지
(보라색의 타일의 연산을 맞춰 분홍색 답을 맞추는 게임입니다.)

기획:

일정 관리는 엑셀로 하루 단위로 세분화하여 수립하였고 기획은 많이 걸리지 않았습니다. 예전부터 퍼즐 게임을 만들고 싶었는데 너무 단순해서 아무도 사용하지 않을 것 같아서 아이디어로 연산 기능을 넣게 되었습니다. 교육용으로 좋을 것 같아요. 퍼플 타일을 움직여서 1+2=3 처럼 순서를 맞춰야하는 기획을 진행했습니다. 설명이 부족하여 게임 진행에 힘들이 있을 수도 있으나 사용자께서 개발자의 의도를 잘 파악해주셨으면 합니다 ㅎㅎ

 

개발:

첫 어플( "칭찬 전화" ) 출시 때  안드로이드 화면전환, 다중화면, custom dialog, admob 등을 많이 활용하여 정말 빠르게 앱 개발을 진행했습니다. 처음이 정말 어려웠지 두번째는 그래도 속도가 조금 향상된 느낌이네요. 첫 출시 이후 시간이 많이 지나서 출시 과정을 잊어버리는 등 시간은 소비되었지만 재활용 요소가 많아서 나름 빠르게 진행했습니다.
혹시, 저와 같이 앱을 출시하고 싶고 시작 단계에 있는 개발자분들 정말 포기하지 마시고 좋은 결과있으시길 바랍니다! 

 

디자인:

피그마를 기본적으로 사용하였습니다. 먼저, 개발을 프로토타입으로 진행했어요. 개발자분들은 아실거에요....디자인은 미적 감각을 타고 나지않으면...망....... 아닙니다. 할수있어요! 피그마와 함께라면요. 피그마로 디자인을 먼저하고 안드로이드 스튜디오의 xml을 하나씩 수정하여 디자인을 많이 수정했어요. 지금도 디자인을 보면 눈물나네요ㅠㅠ 이뿌게 만들고 싶었는데 흑.. 다음에는 더욱 더 노력해야겠어요 ㅎㅎ

 

앱 개발하시는 분, 시작하시는 분 꼭 기획하신 앱이 있다면 출시하시기 바라며 응원합니다.

다음 출시 때 또 글로 찾아뵐게요. 글 읽어 주셔서 감사합니다!
많이 다운 부탁드립니다!!

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

 

 
반응형
반응형

yfinance는 파이썬에서 사용할 수 있는 금융 데이터 수집 라이브러리 중 하나입니다. 이 라이브러리를 사용하면 주식, 지수, 환율 등 다양한 금융 데이터를 쉽게 가져올 수 있습니다. yfinance는 Yahoo Finance에서 제공하는 데이터에 액세스할 수 있는 간단하고 편리한 방법을 제공합니다. 일반적으로 yfinance를 사용하여 특정 주식의 가격, 거래량, 주가지수 등을 가져오거나, 특정 기간 동안의 주식 차트를 생성하는 데 사용됩니다. 

 

 

아래 코드는 애플(AAPL) 주식의 2022년 데이터를 가져와 출력합니다. yfinance를 사용하면 여러 가지 옵션을 통해 데이터를 원하는 형식으로 가져올 수 있습니다. yfinance는 주로 금융 분석 및 데이터 시각화를 위해 사용되며, 데이터 분석, 머신러닝 등 다양한 응용 분야에서 활용될 수 있습니다.

 

<소스코드>

AAPL이라는 애플의 주식 코드를 가지고 와서 시작일 2023.10-01 부터 끝나는 지점 2023-11-27 까지 데이터를 가져오는 코드입니다.

import mplfinance as mpf
import yfinance as yf
from pandas_datareader import data as pdr
import yfinance as yf

yf.pdr_override()

data = pdr.get_data_yahoo("AAPL", start="2023-10-01", end="2023-12-31")
print(data)
# mpf.plot(data, type= "candle")   # mpf.plot(data, type= [line, candle])
mc = mpf.make_marketcolors(up="r", down="b")
s = mpf.make_mpf_style(base_mpf_style='starsandstripes', marketcolors=mc)
mpf.plot(data, type='candle', style=s, volume=True, mav=(5,10,60))

 

<결과값>

 

그렇다면 국내 주식의 코드를 살펴보도록 하겠습니다. 구글 금융이나 네이버 증권을 들어가서 국내 주식의 코드를 가져오겠습니다. 예를 들어 삼성전자의 경우 코드는 " 005930" 가 되고 위의 파이썬 코드에 국내이므로 "AAPL" 대신에 "005930.KS" 을 입력합니다.

 

https://www.google.com/finance/quote/005930:KRX?sa=X&ved=2ahUKEwiJw7OKk7uDAxVec_UHHU-nCTwQ3ecFegQIVhAX

 

<소스코드>
코드만 변경하였습니다. 005930.KS 

import mplfinance as mpf
import yfinance as yf
from pandas_datareader import data as pdr
import yfinance as yf

yf.pdr_override()

data = pdr.get_data_yahoo("005930.KS", start="2023-10-01", end="2023-12-31")
print(data)
# mpf.plot(data, type= "candle")   # mpf.plot(data, type= [line, candle])
mc = mpf.make_marketcolors(up="r", down="b")
s = mpf.make_mpf_style(base_mpf_style='starsandstripes', marketcolors=mc)
mpf.plot(data, type='candle', style=s, volume=True, mav=(5,10,60))

 

<결과값>

 

그러면 이제 국내 주식의 코드를 알기 위해 상장법인목록 파일에서 종목을 찾아서 코드+KS를 입력하여 주식차트를 그릴 수 있습니다. 종목코드를 확인하고 코드를 이용해 주식 차트를 그려보시기 바랍니다.

상장법인목록.xls
0.31MB

 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

 

 

 

반응형
반응형

23년도 3월 구글 play스토어를 통해 내 인생의 처음으로 "칭찬 전화(Compliment Call)" 어플을 출시했습니다. 독학으로 안드로이드 스튜디오를 공부를 하고 기획/개발/디자인 등 1인개발을 진행하였고 올해 목표 중 하나인 어플 출시를 이루게 되어 정말 기쁘네요. 개인적으로 일정을 수립하여 개발을 진행했는데 계속 일정이 뒤쳐졌지만, 결국 출시하였습니다. 혹시, 어플에 버그나 개선사항이 있다면 언제든지 블로그 댓글 및 구글 play스토어의 댓글을 부탁드립니다.

많은 다운 부탁드립니다!

 

그러면 개발 후기를 시작하기전 어플 소개부터 간단히 표로 정리했습니다.

앱 이름 칭찬 전화(Compliment Call)
앱 소개 칭찬 전화는 가짜 전화를 통해 기본 설정된 영상, 내 갤러리의 동영상, 유튜브 url을 통한 영상을 영상전화 처럼 보여주는 앱입니다.
앱 기능 - 가짜 전화 ui로 기본영상, 갤러리 영상, 유튜브 영상을 표시
- 설정 창을 통해 전화목록을 개인이 설정 가능
- 기본 영상 4개 지원하여 가짜 전화로 지정 가능
- 본인 갤러리 내 영상을 가짜 전화로 지정 가능
- 유튜브 링크를 통해 가짜 전화로 지정 가능
다운 받는 곳 <URL 검색>
https://play.google.com/store/apps/details?id=project.complimentcall.complimentcall&pli=1 



<구글 플레이 검색>

관련 이미지
레이아웃1
(메인화면)
메인화면: 세팅한 전화목록을 선택하면 전화 창으로 이동/ 전화목록 세팅창 이동/ 추가/ 삭제
레이아웃2
(설정화면)
세팅화면: 원하는 미디어를 선택하여 전화목록을 세팅하는 화면으로 기본으로 제공하는 영상/ 내가 소장한 영상 / 유튜브 영상으로 3가지 버전으로 설정 가능
레이아웃3
(전화대기)
전화대기화면으로 전화 연결/ 전화 종료 가능

레이아웃4
(전화 중 화면)
기본영상/ 내 갤러리의 영상/ 유튜브 영상에 따라 화면이 다르게 출력되고 기본적으로 카메라뷰를 보여줌
(권한은 허용해야 카메라에 접근이 가능합니다.)

기획:

우선 아이디어가 먼저 세우고 어떤 기능이 있으면 좋을지 리스트화 하였습니다. 그게 22년도 9월 처음 시작했고 목표는 3개월 후인 22년도 12월 31일. 역시.. 처음 기획과는 다르게 기획부터 출시까지 모든 단계가 처음이여서 많이 지연되고 3개월 후인 23년 3월에 출시가 되었네요.

일정 관리는 엑셀로 하루 단위로 세분화하여 수립하였고 기획은 많이 걸리지 않았습니다. 기획은 개발 중간중간 지속적으로 수정하는 방안으로 진행했어요. 다음에는 일정을 더 잘지킬 수 있도록 다짐하겠습니다.

 

개발:

정말 구글에는 없는게 없네요. 여러분 모르는 기술은 모두 구글에 있습니다. 개발은 "구" 선생과 같이 하는거에요 ^^

안드로이드 화면전환, 다중화면, custom dialog, videoview, youtubevideoview, admob 등 정말 많이 배웠습니다. 다음 앱 개발은 조금 더 빨리 진행할 수 있을거에요. 혹시, 저와 같이 앱을 출시하고 싶고 시작 단계에 있는 개발자분들 정말 포기하지 마시고 좋은 결과있으시길 바랍니다! 

 

디자인:

피그마를 기본적으로 사용하였습니다. 먼저, 개발을 프로토타입으로 진행했어요. 개발자분들은 아실거에요....디자인은 미적 감각을 타고 나지않으면...망....... 아닙니다. 할수있어요! 피그마와 함께라면요. 피그마로 디자인을 먼저하고 안드로이드 스튜디오의 xml을 하나씩 수정하여 디자인을 많이 수정했어요. 지금도 디자인을 보면 눈물나네요ㅠㅠ 이뿌게 만들고 싶었는데 흑.. 다음에는 더 노력해야겠어요 ㅎㅎ

 

앱 개발하시는 분, 시작하시는 분 꼭 기획하신 앱이 있다면 출시하시기 바라며 응원합니다.

다음 출시 때 또 글로 찾아뵐게요. 글 읽어 주셔서 감사합니다!

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

개인정보처리방침

2023. 3. 20. 00:08

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

javascript setTimeout, setInterval

javascript/기본 2023. 2. 15. 00:44 Posted by IT-개발자
반응형

자바스크립트에서 일정 시간을 두고 실행하는 메서드가 있습니다. 바로 setTimeout, setInterval 2개입니다.

  • setTimeout 은 지연 메소드로 ms(millisecond) 단위 뒤에 한번만 콜백 실행
  • setInterval 은 반복 메소드로 ms(millisecond) 단위로 반복해서 실행

실습(setTimeout ): 

setTimeout 에 대해 실습해보도록 하겠습니다. 처음 script를 실행하면서 00:22:34 에서 3초 뒤 실행되어 00:22:37에 시작되었습니다.

실습(setTimeout ): 

setTimeout 에 대해 실습해보도록 하겠습니다. 처음 script를 실행하고 3,5 초뒤 setTimeout 지연함수를 실행되고 init 에서 00:29:36 실행 후 00:29:39, 00:29:41 에 실행되었습니다. 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        console.log("init: "+new Date())
        setTimeout(() => console.log("3초 후 실행"+new Date()),          3000)
    </script>
</body></html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        console.log("init: "+new Date())
        timerafter3 = () => (setTimeout(() => console.log("3초 후  실행"+new Date()), 3000))
        timerafter5 = () => (setTimeout(() => console.log("5초 후  실행"+new Date()), 5000))
       
        timer3and5 = () => (timerafter3(), timerafter5())

        timer3and5(); //시작 후 3, 5초 후 실행
    </script>
</body></html>

실습(clearTimeout):

그렇다면 이 지연 함수를 어떻게 제거할까요? 실행 중에 중지해야하는 일이 생긴다면 변수에 setTimeout을 매핑하고 clearTimeout을 하여 중지합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        console.log("init: "+new Date())
        timerafter3 = (setTimeout(() => console.log("3초 후 실      행"+new Date()), 3000))
        timerafter5 = (setTimeout(() => console.log("5초 후 실      행"+new Date()), 5000))
        timerstop4 = (clearTimeout(timerafter5))
    </script>
</body></html>

 

실습(setInterval):

setInterval에 대해 실습해보도록 하겠습니다. 처음 script를 실행하면서 00:37:13 에서 3초 마다 계속 반복 실행됩니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        console.log("init: "+new Date())
        timerafter3 = (setInterval(() => console.log("3초 후 반복실행"+new Date()), 3000))
    </script>
</body></html>

실습(clearInterval):

그렇다면 어떻게 setInterval을 중지할까요? 위의 코드에서 7초 뒤 한번만 실행하는 setTimeout을 실행하면 3초마다 실행되는 setInterval은 2번만 실행되고 중지되겠죠. 아래의 콘솔을 확인하면 init 이후 2번만 실행되고 clearInterval 된 것을 확인 할 수 있습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        console.log("init: "+new Date())
        timerafter3 = (setInterval(() => console.log("3초 후 반복실행"+new Date()), 3000))
        timerstop3 = (setTimeout(() => clearInterval(timerafter3),7000))
    </script>
</body></html>

여기서 중요한 것은 시간함수는 남발해서 사용하면 메모리 누수 현상이 일어날 수 있습니다. 그러므로 꼭 미사용시에는 clearTimeout, clearInterval 등을 통해 타이머를 삭제하도록 합니다. 만약, setInterval 1초마다 실행되는 함수가 있다면 성능 저하는 피할 수 없습니다.

 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'javascript > 기본' 카테고리의 다른 글

javascript Promise Async/Await  (0) 2023.02.14
javascript Promise  (0) 2023.02.13
javascript 연산자 기초  (0) 2023.02.12

javascript Promise Async/Await

javascript/기본 2023. 2. 14. 02:35 Posted by IT-개발자
반응형

자바스크립트에서 비동기 처리를 위한 콜백함수 사용 시 콜백 지옥을 해결할 수 있는 것이 Promise입니다. Async/Await 는 비동기 처리 문법으로 가장 최근에 나온 문법으로 ES8에 해당하며 Promise를 쉽게 사용할 수 있도록 합니다.

 

  • Async는 함수 앞에 선언되며 Async의 결과는 Promise 객체로 return 됩니다.
  • Await는 Async와 쌍을 이루어 사용하여 Await를 사용하면 함수앞에 Async를 작성해야 한다.
  • Promise와 차이점은 기존 함수에 Async를 작성하는 것처럼 구성되어 간결하다.
  • 가장 큰 차이점은 비동기 처리에 사용되는 문법이지만 코드 실행을 동기적으로 코딩을 할 수 있는것 입니다.

실무에서 많이 사용되니 실습을 통해 살펴보도록 하겠습니다.

 

실습:

async 를 함수 test앞에 작성하고 console.log("result_promise "+result_promise); 를 확인하면 Object 는 Promise 임을 알 수 있습니다. 그리고 then 함수는 Promise에서 사용하는 것으로 async 는 Promise 객체를 반환하는 것을 확인할 수 있습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        async function test(value) {
           return (value+1);
        }
       
        let result_promise = test();
        console.log("result_promise "+result_promise);
       
        test(1).then((value) => console.log("value:"+value));
    </script>
</body></html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        const f = async (value) => {
            return value+1;
        }

        f(3).then((value) => console.log(value))
    </script>
</body></html>

실습: 

await 는 비동기 처리에서 동기 형태의 로직을 사용할 수 있게 하는 것으로 해당 로직을 기다리게 합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        const timer = () => {
            return new Promise(resolve => setTimeout(resolve, 1000));
          };
         
          async function wait(){
            await timer();
            return "wait";
          };


         async function test(){
            const waitstr = awaitwait();
            return waitstr;
         }
         
         test().then(console.log)
    </script>
</body></html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        const timer = () => {
            return new Promise(resolve => setTimeout(resolve, 1000));
          };
         
          async function wait(){
            timer();
            return "wait";
          };


         async function test(){
            const waitstr = wait();
            return waitstr;
         }
         
         test().then(console.log)
    </script>
</body></html>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'javascript > 기본' 카테고리의 다른 글

javascript setTimeout, setInterval  (0) 2023.02.15
javascript Promise  (0) 2023.02.13
javascript 연산자 기초  (0) 2023.02.12

javascript Promise

javascript/기본 2023. 2. 13. 01:11 Posted by IT-개발자
반응형

자바스크립트에서 비동기 처리를 위한 콜백함수 사용 시 콜백 지옥을 해결할 수 있는 것이 Promise입니다.

먼저, 동기(Synchronous)와 비동기(Asynchronous)에 차이에 대해 확인하도록 하겠습니다.

 

동기(Synchronous):

1. 동시에 일어난다는 의미로 직렬적으로 로직을 처리함

2. 직렬적으로 일을 처리하므로 앞의 결과가 처리될 때 까지 뒤에 로직은 대기 후 순차적으로 진행

3. 설계가 직관적임

 

비동기(Asynchronous):

1. 동시에 일어나지 않은다는 의미로 병렬적으로 로직을 처리함

2. 병렬적으로 로직을 처리하므로 앞의 로직이 끝나지 않더라도 진행

3. 설계가 복잡함

 

자바스크립트에서  비동기처리를 위해 Promise를 많이 사용하는데, 콜백 함수를 사전에 살펴보고 Promise의 내용을 확인하도록 하겠습니다.

 

callback 함수:

어떤 함수의 실행이 끝난 뒤 호출되어 사용되는 함수를 의미합니다. 아래의 표를 확인하면 call("test", callback) 함수를 호출하고 call 함수를 처리 후 callback 함수를 처리하는 형태입니다. 주로 자바스크립트에서는 ajax에 success값에 많이 사용됩니다. 이 callback함수가 많아지고 남발되면 코드 관리가 어렵고 콜백지옥에 빠지기 쉽습니다. 이를 해결하기 위해 Promise가 나온 이유입니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>

     function callback(){
          console.log("콜백1");
     }


     function call(name, callback){
          console.log("name: "+name)
          callback();
     }

     call("test", callback);

    </script>
</body></html>

 

Promise

아래 그림을 보면 Promise는 pending, fulfilled,reject의 상태를 가지고 있습니다.

참고: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise

  • Pending(대기중)
    Promise 객체의 기본상태를 의미하며 비동기 결과가 나오지 않는 초기 상태를 의미합니다.
  • Fullfilled(이행 완료됨)
    비동기 처리가 완료된 상태를 의미합니다.
  • Reject(거부됨)
    비동기 처리가 완료는 되었지만 연산에 실패함을 의미합니다. 

실습: 

minusTest 함수를 호출하며 num 3을 입력합니다. 그 이후 setTimeout 1초(1000millisecond) 후 실행하라는 지연함수를 싱행하고 then 함수를 순서대로 호출하고 있습니다.

then은 primise 작업이 성공했을때, 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        function minusTest(num){
            return new Promise((resolve, reject) => {
                setTimeout(function(){
                    num-=1;
                    if(num>=0)resolve(num);
                    else reject(num);
                }, 1000);
            });
        }
       
        minusTest(3).then((num)=>{
            console.log("then2: "+num);
            return minusTest(num)
        }).then((num)=>{
            console.log("then1: "+num);
            return minusTest(num)
        }).then((num)=>{
            console.log("then0: "+num);
            return minusTest(num)
        }).catch((err) => console.log("err:"+err));
       
    </script>
</body></html>

 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'javascript > 기본' 카테고리의 다른 글

javascript setTimeout, setInterval  (0) 2023.02.15
javascript Promise Async/Await  (0) 2023.02.14
javascript 연산자 기초  (0) 2023.02.12

javascript 연산자 기초

javascript/기본 2023. 2. 12. 01:44 Posted by IT-개발자
반응형

이번 시간에는 javascript의 기본 연산자에 대해서 알아보도록 하겠습니다.

기본 연산자에는 산술, 비교, 논리, 삼항, 비트 연산자가 있으며 실무에서 많이 사용하는 산술 연산자, 비교 연산자, 삼항 연산자를 중점으로 알아보도록 하겠습니다.

 

1. 산술연산자

사칙연산을 위해 필요한 연산자로 아래 표와 같습니다.

표 참고: https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/Math

+ 더하기 두 개의 숫자를 더합니다. 6 + 9
- 빼기 왼쪽에 있는 수를 오른쪽 수로 뺍니다. 20 - 15
* 곱하기 두 개의 숫자를 곱합니다. 3 * 7
/ 나누기 왼쪽의 숫자를 오른쪽 숫자로 나눠서 몫을 구합니다. 10 / 5
% 나머지 (또는 모듈로) 왼쪽의 숫자를 오른쪽 숫자로 나눠서 나머지를 구합니다. 8 % 3 ( 2를 반환합니다, 8을 3으로 나눴을 때 몫이 2이기 때문입니다.)
** 지수 왼쪽의 숫자를 오른쪽 숫자만큼 제곱합니다. 5 ** 2 ( 5의 제곱이기 때문에 25를 반환합니다.)

실습:

위의 표를 실습해보도록 하겠습니다. 우선 왼쪽 표와 같이 html 파일을 하나 생성하도록 하겠습니다.

그리고 html 파일을 열어 개발자 도구를 이용하여 콘솔을 확인하게 되면 연산자를 이용한 값이 매핑되어있습니다.

 

왼쪽 표의 코드를 보면 console.log에 6+9에 괄호를 추가하여 (6+9)  형태로 되어있습니다. 만약 console.log("6+9: "+6+9); 를 하게된다면 제일 아래의 결과값으로 69인 string 형태로 나오게 되니 type과 관계가 있으니 참고하시기 바랍니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        console.log("6+9: "+(6+9));
        console.log("20-15: "+(20-15));
        console.log("3*7: "+(3*7));
        console.log("10/5: "+(10/5));
        console.log("8%3: "+(8%3));
        console.log("5**2: "+(5**2));
    </script>
</body></html>

 

2. 비교 연산자

비교 연산자는 두개의 값을 비교하여 if문에 비교문으로 많이 사용합니다.

표 참고: https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/Math

       
=== 일치 연산자 왼쪽과 오른쪽의 값이 완전히 동일한지 테스트합니다.(타입, 값 포함) 5 === 2 + 4
!== 불일치 연산자 왼쪽과 오른쪽 값이 서로 동일하지 않은지 테스트합니다.(타입, 값 포함)
-> 값과 타입이 하나라도 같지 않으면 false 반환합니다.
5 !== 2 + 3
== 일치 연산자 왼쪽과 오른쪽의 값이 완전히 동일한지 테스트합니다. -
!= 불일치 연산자 왼쪽과 오른쪽 값이 서로 동일하지 않은지 테스트합니다. -
< ~보다 작음 왼쪽 값이 오른쪽 값보다 작은지 테스트합니다. 10 < 6
> ~보다 큼 왼쪽 값이 오른쪽 값보다 큰지 테스트합니다. 10 > 20
<= ~보다 작거나 같음 왼쪽 값이 오른쪽 값보다 작거나 같은지 여부를 테스트합니다. 3 <= 2
>= ~보다 크거나 같음 왼쪽 값이 오른쪽 값보다 크거나 같은지 여부를 테스트합니다. 5 >= 4

실습:

위의 표를 실습해보도록 하겠습니다. 우선 왼쪽 표와 같이 html 파일을 하나 생성하도록 하겠습니다.

그리고 html 파일을 열어 개발자 도구를 이용하여 콘솔을 확인하게 되면 연산자를 이용한 값이 매핑되어있습니다.

 

5 === 2 + 4 : 5===6이므로 타입은 숫자 형태로 같지만 값이 다르므로 false

5 !== 2 + 3 : 5와 5는 서로 동일하여 조건에 부합하므로 false

10<6 : 10은 6보다 작은값이 아니므로 false

10>20: 10은 20보다 크지 않아 false

3<=2 : 3은 2초과이므로 false

5>=4: 5는 4보다 크므로 true

 

비교 연산자는 실무에서 정말 많이 사용하니 참고하시기 바랍니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        console.log("5 === 2 + 4: "+(5 === 2 + 4));
        console.log("5 !== 2 + 3: "+(5 !== 2 + 3));
        console.log("10 < 6: "+(10 < 6));
        console.log("10 > 20: "+(10 > 20));
        console.log("3 <= 2: "+(3 <= 2));
        console.log("5 >= 4: "+(5 >= 4));
    </script>
</body></html>

 

3. 삼항연산자

조건문 if를 대신하여 쉽게 비교하여 사용하는 연산자입니다.

아래와 같이 삼항연산자의 값을 조건식을 작성하여 조건이 true이면 true에 해당하는 함수의 결과가 값이 되고, 조건이 false이면 false에 해당하는 함수의 결과가 값이 됩니다. 실습을 통해 확인하도록 하겠습니다.

 

상항연산자 값 = 조건식 ? f(true) : f(false)

 

실습: 

a값은 2는 1보다 크므로 참인 결과값이 2:1 중 2가 됩니다.

d값은 b는 c보다 작으므로 거짓 값인 ffalse 값인 5가 됩니다.

e값은 c는 b보다 크기 때문에 참인 값인 ftrue 값인 4가 됩니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
     var a = (2>1)? 2:1
     console.log("a: "+a)


     var b = 2;
     var c = 3;
     function ftrue(){
         //함수
         return 4;
      }
     function ffalse(){
         //함수
        return 5;
     }

     var d = (b>c)? ftrue():ffalse()
     var e = (b<c)? ftrue():ffalse()
     console.log("d: "+d)
     console.log("e: "+e)

    </script>
</body></html>

 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'javascript > 기본' 카테고리의 다른 글

javascript setTimeout, setInterval  (0) 2023.02.15
javascript Promise Async/Await  (0) 2023.02.14
javascript Promise  (0) 2023.02.13

01. openCV 이미지 출력 및 색상 변경

OpenCV/기본 2023. 1. 15. 15:45 Posted by IT-개발자
반응형

이번 시간에는 openCV에서 가자 기본인 이미지를 출력해보도록 하겠습니다.

openCV를 이용하여 기존 이미지를 출력함과 동시에 아래 이미지를 흑백으로 보여주도록 하겠습니다.

https://pixabay.com/illustrations/dog-sitting-mascot-tamed-brown-5188108/

 

<이미지 및 흑백 보여주기>

import sys
import cv2

img = cv2.imread('dog.png', cv2.IMREAD_COLOR)
gray_img =  cv2.imread('dog.png', cv2.IMREAD_GRAYSCALE)
cv2.imwrite('dog_gray.png',img)

if img is None:
    print('Image load failed!')
    sys.exit()    #이미지가 없는 경우 프로그램을 종료
cv2.namedWindow('basic_dog', cv2.WINDOW_NORMAL)
cv2.namedWindow('gray_dog', cv2.WINDOW_NORMAL)
cv2.resizeWindow('basic_dog', 500, 500)
cv2.resizeWindow('gray_dog', 500, 500)

cv2.imshow('basic_dog',img) # basic_dog 라는 제목으로 이미지 화면에 보여주기
cv2.imshow('gray_dog',gray_img) # gray_dog 라는 제목으로 이미지 화면에 보여주기
cv2.waitKey(0) #어떤 키가 입력될때까지 대기
cv2.destroyAllWindows() #모든 창 닫기

 

 

<이미지 색상 변경>

import sys
import cv2

img = cv2.imread('dog.png')
gray_dog1 =  cv2.imread('dog.png', cv2.IMREAD_GRAYSCALE)
gray_dog2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

if img is None:
    print('Image load failed!')
    sys.exit()    #이미지가 없는 경우 프로그램을 종료
cv2.namedWindow('gray_dog1', cv2.WINDOW_NORMAL)
cv2.namedWindow('gray_dog2', cv2.WINDOW_NORMAL)
cv2.resizeWindow('gray_dog1', 500, 500)
cv2.resizeWindow('gray_dog2', 500, 500)

cv2.imshow('gray_dog1',gray_dog1)
cv2.imshow('gray_dog2',gray_dog2)
cv2.waitKey(0) #어떤 키가 입력될때까지 대기
cv2.destroyAllWindows() #모든 창 닫기

여기서 각 함수를 알아보도록 하겠습니다.

 

cv2.IMREAD_COLOR : 별도로 지정하지 않을 경우 사용되는 기본값이며 칼라 이미지로 읽어드림. 이미지의 투명도값은 무시된다.
cv2.IMREAD_GRAYSCALE : 이미지를 Grayscale로 읽는다
cv2.IMREAD_UNCHANGED : 투명도인 Alpha 채널을 포함하여 읽는다.

 

cvtColor 는 색상을 바꾸는 것으로
cv2.COLOR_BGR2GRAY는 색상 이미지를 회색조 이미지로 변환합니다.
 
 
 
 
다음은 실제 카메라를 연결하고 색상을 바꿔 보도록 하겠습니다.
<카메라 연결을 통한 색상 변경>
import numpy as np
import cv2

cap = cv2.VideoCapture(0) #video 연결된 디바이스 중 첫번째를 가지고 온다.

while(True):
    ret, frame = cap.read()     #   비디오 값이 정상적이면 ret은 True/ cap.read을 통해 frame을 연속적으로 읽는다.

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('video', frame)          #   연속적으로 frame을 출력하여 보여준다.
    cv2.imshow('gray', gray)            #   기본 영상을 gray로 변환.

    if cv2.waitKey() == ord('q'):   #   키보드 q가 나오면 종료.
        break

cap.release()   # 종료이므로 video 객체 cap을 없앤다.
cv2.destroyAllWindows() # 종료

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

layout- LinearLayout(안드로이드)

Android Studio/기본1 2023. 1. 8. 17:12 Posted by IT-개발자
반응형

레이아웃 종류는 다음과 같습니다.

ConstraintLayout, LinearLayout(horizontal), LinearLayout(vertical), FrameLayout, TableLayout, TableRow, Space

 

그중에서도 LinearLayout을 살펴보도록 하겠습니다.

LinearLayout은 여러 View(Button, imageView 등) 컴포넌트들을 수직적(Vertical), 수평적(Horizontal)으로 컴포넌트를 레이아웃 위에 정렬하여 배치할 수 있습니다.  그래서 수직, 수평적으로 사용하기 때문에 LinearLayout은 직관적이라는 장점이 있습니다.

 

그러면 LinearLayout에 대해 실습을 해보도록 하겠습니다.

1. 새로운 Project를 만들겠습니다.
2. 처음 생성한 프로젝트의 activity_main.xml 화면에서 Component Tree 는 앞의 시간에 확인하였듯이 ConstraintLaytou으로 지정되어 있으나 오른쪽 마우스를 클릭해서 Convert View를 통해 View를 LinearLayout으로 변경하도록 하겠습니다.
3. LinearLayout으로 변경하기 위해 해당 레이아웃을 클릭한 후 Apply를 클릭하도록 하겠습니다.
4. 레이아웃을 바꾸면 기본적으로 Horizontal 인 수평정렬이 기본으로 세팅되어 있습니다.
5. hello world인 TextView 컴포넌트의 오른쪽 속성인 layout_width를 변경하여 현재 warp_content인 내용물에 맞춰진 크기를 match_parent를 변경하여 부모창인 LinearLayout에 맞추도록 하겠습니다.
6. 위와 같이 hello World가 부모창인 LinearLayout에 맞춰진것을 확인할 수 있습니다.
7. TextView 컴포넌트를 드래그해서 추가하도록 하겠습니다.
8. TextView 두개의 컴포넌트가 Horizontal 인 수평정렬이 된것을 확인할 수 있습니다. 혹시, TextView가 겹치는 현상이 이으면 layout_weight 가중치를 모두 1로 설정하면 됩니다.
9. Horizontal 인 수평정렬에 대한 가중치 값

 

그러면 이어서 레이아웃을 Vertical인 수직으로 바꿔서 실습해도록 하겠습니다.

1. LinearLayout에서 오른쪽 마우스를 클릭해서 Conver orientation to vertical(수직)로 바꾸면 되고 만약 vertical인 경우에는 horizontal로 바꾸면 되겠습니다.
2. 레이아웃이 vertical 의 LinearLayout으로 바뀐것을 확인할 수 있으며 자동으로 textView들이 가중치인 weight 1에 의해 세팅된것을 확인할 수 있습니다.
최종적으로 Code형태로 이를 확인하면 LinearLayout의 vertical 형태인 orientation 속성을 확인할 수 있습니다. 그리고 TextView 2개의 가중치 또한 확인 할 수 있습니다. 위의 Code의 모든 xml 값을 복사해서 새로운 Project가 생성되었을때 복사하여 붙여넣으면 그 디자인을 바로 쓸수가 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />
</LinearLayout>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'Android Studio > 기본1' 카테고리의 다른 글

layout-ConstraintLayout(안드로이드)  (0) 2023.01.07
01. 기본 레이아웃 xml 설명  (0) 2022.12.21

layout-ConstraintLayout(안드로이드)

Android Studio/기본1 2023. 1. 7. 13:19 Posted by IT-개발자
반응형

레이아웃 종류는 다음과 같습니다.

ConstraintLayout, LinearLayout(horizontal), LinearLayout(vertical), FrameLayout, TableLayout, TableRow, Space

 

그중에서도 ConstraintLayout을 살펴보도록 하겠습니다.

ConstraintLayout은 여러 View(Button, imageView 등) 컴포넌트들을 객체간에 제약 조건을 설정하여 배치하는 것을 말합니다. ConstraintLayout은 다른 레이아웃들보다 간편하고, 유연한 특징을 가지고 있고 XML을 수정하지 않고 드래그 앤 드롭만을 사용하여 빌드할 수 있는 특징이 있습니다.

 

그러면 실습을 해보도록 하겠습니다.

1. 새로운 Project를 만들겠습니다.
2. 처음 Project를 열고 디자인 activity_main.xml 파일을 열고 디자인 영역을 보면 ConstraintLayout으로 지정되어 있습니다.
3. 중간 영역의 Hello World TextView 영역을 선택하면 위에서 설명드린 가로와 세로에 대한 제약사항이 추가된 것을 확인할  수 있습니다.
4. Button을 추가하기 위해 버튼 컴포넌트를 드래그해서 원하는 위치로 드래그 합니다.
5. 추가한 버튼의 영역을 추가하여 가로, 세로에 대한 제약사항을 추가합니다.
6. 가상머신을 확인할 결과 추가한 버튼 이미지가 원하는 제약사항을 추가한 위치에 있는 것을 확인할 수 있습니다.
7. 그리고 오른쪽 속성 테이블 중 layout 영역에서 기본 영역 사이즈를 지정할 수 있습니다. 만약 가록 layout이 30dp 이라면 양쪽 10dp씩 지정을 하고 나머지 중간 10dp을 기준으로 button 이 지정됩니다.

 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'Android Studio > 기본1' 카테고리의 다른 글

layout- LinearLayout(안드로이드)  (1) 2023.01.08
01. 기본 레이아웃 xml 설명  (0) 2022.12.21

01. 기본 레이아웃 xml 설명

Android Studio/기본1 2022. 12. 21. 01:56 Posted by IT-개발자
반응형

안드로이드 스튜디오를 처음 실행하면 왼쪽 project 목록 중 res-layout 폴더에 디자인 xml 파일이 있습니다.

activity_main.xml 파일을 더블 클릭하면 파일이 열리고 오른쪽 영역을 보면 code/ split /Design 3가지가 있고,

 

1. code는 실제 code를 작성하여 디자인 레이아웃을 구성 (다른 코드를 복사 붙여넣기가 용이함)

2. split은 코드와 디자인을 함께 보면서 구성

3. Design은 파레트 형식의 디자인 영역으로 레이아웃을 구성

 

위의 3가지 방식으로 레이아웃 xml파일을 작성할 수 있습니다.

필자는 Design으로 시작하겠습니다.

 

palette 영역을 통해 component들을 찾으면서 레이아웃을 구성할 수 있습니다. 

palette 영역은 아래 표와 같습니다.​

레이아웃 종류는 다음과 같습니다.

ConstraintLayout, LinearLayout(horizontal), LinearLayout(vertical), FrameLayout, TableLayout, TableRow, Space

다음장에서 layout에 대해 하나씩 살펴보도록 하겠습니다. 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'Android Studio > 기본1' 카테고리의 다른 글

layout- LinearLayout(안드로이드)  (1) 2023.01.08
layout-ConstraintLayout(안드로이드)  (0) 2023.01.07

안드로이드 스튜디오 설치-01

Android Studio/설치 2022. 12. 21. 01:34 Posted by IT-개발자
반응형

안녕하세요, 이번에는 안드로이드 app을 제작할 수 있는 Tool을 windows에서 설치해보도록 하겠습니다.

먼저, 안드로이드 스튜디오 다운을 하도록 합니다.

 

해당 페이지에서 Download Android Studoi 버튼을 클릭합니다.

클릭하면 정책 동의서 하단의 체크 박스를 체크 후 download 버튼을 클릭합니다.

다운하면 설치파일 다운 성공!

 

 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

 

반응형
반응형

이번 시간에는 Vector() 클래스에 대해서 알아보도록 하겠습니다.


Vector()


Vector() 는 동적인 배열을 정적인 크기를 가지고 있는 특징이 있습니다. 보통 배열을 선언할 때 배열의 개수를 제한하지만, Vector 클래스는 가변한다는 장점이 있습니다. 벡터는 배열을 저장하는 공간입니다.


아래는 Vector() 클래스의 생성자 입니다.


1.Vector()

:크기가 10인 벡터를 생성합니다. 크기를 넘어서면 10 증가합니다.

예를들어, 크기가 10인 벡터가 생성된다면 아래와 같습니다.

1번객체
2번객체
3번객체
4번객체
5번객체
6번객체
7번객체
8번객체
9번객체
10번객체

위의 10개의 크기를 가진 벡터는 10을 초과하면 20이 됩니다.


2.Vector(int 초기값)

:크기가 int 개수인 벡터를 생성합니다. 크기를 넘어서면 10 증가합니다.


3.Vector(int 초기값, int 증가값)

:초기의 크기가 int개수인 벡터를 생성하며 그 개수가 가득차면 int 증가값만큼 벡터가 증가합니다.



아래는 Vector() 클래스의 주요 메소드입니다.

addElement(객체)

:객체를 Vector에 저장합니다.


elementAt(int)

:몇번째 벡터값 요소를 확인합니다.


Capacity()

:벡터의 크기를 확인합니다.


아래의 예제를 통하여 더 Vector()에 대해서 살펴보도록 하겠습니다.

보통 Vector() 클래스는 <객체>를 사용하여 어떤 type의 객체를 생성할지 나타냅니다.

 package 기본01;

 

import java.util.Vector;

 

public class a13 {

 

        public static void main(String[] args) {

 

               Vector<String> a1 = new Vector<String>(5,5);

               // 초기값이 5이며 증가값이 5 벡터 생성

 

               a1.addElement("1");

               // 1번이라는 String 객체값은 벡터의 첫번째 요소에 저장

               a1.addElement("2");

               a1.addElement("3");

               a1.addElement("4");

               a1.addElement("5");

               System.out.println(a1.capacity());

               //벡터의 크기 확인

               a1.addElement("6");

               System.out.println(a1.capacity());

               //늘어난 벡터의 크기 확인

              

               System.out.println("--------------");

               System.out.println(a1.elementAt(0));

               System.out.println(a1.elementAt(1));

               System.out.println(a1.elementAt(2));

               System.out.println(a1.elementAt(3));

               System.out.println(a1.elementAt(4));

               System.out.println("--------------");

               System.out.println(a1.elementAt(5));

 

        }

 

}


<결과물>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

JAVA 설치-01(JDK 설치)

JAVA-기본/설치 2018. 7. 5. 17:10 Posted by IT-개발자
반응형

안녕하세요, JAVA에 대해서 알기전에 JAVA와 관련된 프로그램을 설치하도록 하겠습니다.

우선 JDK를 설치하도록 하겠습니다.


1. 구글에 접속합니다.


2. 자바 다운로드 또는 JAVA 다운로드 를 검색합니다.

검색 후 아래의 사이트에 접속합니다.(oracle 홈페이지의 다운로드 영역으로 주소는 아래와 같습니다.)


http://www.oracle.com/technetwork/java/javase/downloads/index.html





3. 위의 사이트에 접속하면 아래와 같은 페이지가 나옵니다.


*64비트 운영체제인 경우

 Java Platform(JDK)10을 다운로드를 클릭합니다. 



클릭하면 아래의 사이트가 뜨는데 중간 지점에 Accept License Agreement를 check 하시고 64비트 운영체제를 다운 받습니다.



*32비트 운영체제인 경우

32비트 운영체제이시면 현 페이지에서 내려보시면 아래의 그림이 있는데 8U171/8U172 다운 클릭하시면 윈도우X86 있습니다.



클릭하면 아래의 사이트가 뜨는데 중간 지점에 Accept License Agreement를 check 하시고 32비트 운영체제(x86)를 다운 받습니다.

5. 다운받은 설치파일을 찾아서 설치합니다.

다음에는 컴퓨터 상에서 자바를 사용할 수 있는 환경을 구축하도록 하겠습니다.


자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형
반응형

이번 시간에는 StringTokenizer() 클래스에 대해서 알아보도록 하겠습니다.


StringTokenizer()


StringTokenizer() 는 String의 문자열을 원하는 문자열을 기준으로 나눌 수 있는 클래스입니다.

예를들어 String="123,456,789"; 가 존재한다면 ","(쉼표)을 기준으로 String을 123/456/789 으로 3등분할 수 있습니다.


아래는 StringTokenizer()의 생성자 입니다.


아래는 StringTokenizer()의 특징입니다.


1. StringTokenizer()는 객체를 생성해서 사용해야합니다.

2. StringTokenizer()는 객체를 생성 후 import 해야합니다.

3. 위의 StringTokenizer() 중 string str은 문자열을 나눌 대상입니다.

4. string delim은 str 문자를 나눌때 기준이 되는 문자열입니다.

5. boolean은 나누는 기준이되는 문자열의 출력 여부를 묻습니다.

6. 여러개의 구획 문자가 적용가능하다. (아래 예제 참고)


아래는 StringTokenizer() 클래스와 함께 사용되는 메소드입니다.

(나누는 문자의 각 대상들을 token이라고 합니다.)


countTokens(); 

토큰의 개수 확인
hasMoreTokens(); 토큰이 더 남아있는지 확인
nextToken(); 다음 토큰을 불러옴


아래의 예제를 통하여 더 StringTokenizer()에 대해서 살펴보도록 하겠습니다.

 package 기본01;

 

import java.util.StringTokenizer;

 

public class a01 {

 

        public static void main(String[] args) {

 

               String a = "123,456,789";

               StringTokenizer a1 = new StringTokenizer(a, ",");

               // 객체 생성 import

 

               String b = "1,2,3,4,5,6,7,8,9";

               StringTokenizer b1 = new StringTokenizer(b, ",");

               // 객체 생성 import

 

               System.out.println(a1.countTokens());

               System.out.println(b1.countTokens());

 

        }

 

}


<결과물>


 package 기본01;

 

import java.util.StringTokenizer;

 

public class a02 {

 

        public static void main(String[] args) {

 

               String a = "123,456,789";

               StringTokenizer a1 = new StringTokenizer(a, ",");

               // 객체 생성 import

 

               String b = "1,2,3,4,5,6,7,8,9";

               StringTokenizer b1 = new StringTokenizer(b, ",");

               // 객체 생성 import

 

               while (a1.hasMoreTokens()) {

                       // hasMoreTokens while문을 사용합니다.

                       System.out.println(a1.nextToken());

                       System.out.println("hasMoreTokens 토큰개수 만큼 진행됩니다."+a1.countTokens()+"처음 3토큰이 -1 감소하네요");

                      

 

               }

               while (b1.hasMoreTokens()) {

                       System.out.println(b1.nextToken());

 

               }

        }

}


<결과물>


<tokenizer생성자 boolean true 적용 예제>

 package 기본01;

 

import java.util.StringTokenizer;

 

public class a02 {

 

        public static void main(String[] args) {

 

               String a = "123,456,789";

               StringTokenizer a1 = new StringTokenizer(a, ",", true);

               // 객체 생성 import

 

              // true , 분리하는 쉼표도 같이 출력됩니다

 

               while (a1.hasMoreTokens()) {

                       // hasMoreTokens while문을 사용합니다.

                       System.out.println(a1.nextToken());

                       System.out.println("hasMoreTokens 토큰개수 만큼 진행됩니다." + a1.countTokens() + "처음 토큰이 -1 감소하네요");

 

               }

        }

}

<결과물>


*중요 <tokenizer생성자 여러개의 delim>

이 기능을 사용하여 간단한 계산기 구현 가능합니다.

 package 기본01;

 

import java.util.StringTokenizer;

 

public class a02 {

 

        public static void main(String[] args) {

 

               String a = "1-2+-*/3+4+-*/56";

               StringTokenizer a1 = new StringTokenizer(a, "+-*/");

               // 객체 생성 import

 

               // true , 분리하는 쉼표도 같이 출력됩니다.

 

               while (a1.hasMoreTokens()) {

                       // hasMoreTokens while문을 사용합니다.

                       System.out.println(a1.nextToken());

               }

        }

}


<결과물>



자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형
반응형

이번 시간에는 StringBuffer 클래스의 insert() 메소드를 확인해보도록 하겠습니다. 우선. StringBuffer 클래스는 String 클래스와는 다르게 정적 문자열이라는 특징을 가지고 있습니다. 

예를들어, String 클래스의 변수 a가 ="123"; 이면, 이 a는 변함이 없지만, StringBuffer 클래스의 a는 변할 수 있다는 특징이 있습니다. 다만, 이 StringBuffer는 new를 이용하여 새로운 객체를 생성하여야 합니다.


다음으로 insert()메소드에 대해서 확인하도록 하겠습니다.

insert(int 시작점, boolean)

insert(int 시작점, int)

insert(int 시작점, long)

insert(int 시작점, float)

insert(int 시작점, double)

insert(int 시작점, char)

insert(int 시작점, string)


insert() 메소드는 StringBuffer 클래스에 속한 메소드이며, 문자열에서 어떤 임의 지점에 문자를 삽입할 수 있는 기능이 있습니다.

예를들어, a="1256"; 이 있다면 insert()메소드를 이용하면 3번 index자리로 부터 "34"를 삽입하여 a="123456" 으로 만들 수 있습니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기04;

 

public class a04 {

 

        public static void main(String[] args) {

 

               StringBuffer a = new StringBuffer("12삽입56");

               // "12삽입56" StringBuffer 객체를 생성합니다.

 

               // 먼저 삽입이라는 문구를 제거하고 45 삽입하도록 하겠습니다.

               a.delete(2, 4);

               System.out.println(a);

               // delete 이용하여 "삽입" 문구를 지웠습니다.

 

               System.out.println("---------");

 

               System.out.println(a.indexOf("34"));

               // 현재는 "34" String 존재하지 않으므로 -1 값을 반환합니다.

 

               System.out.println("---------");

               a.insert(3, "34");

               /// 3 index자리에 String "34" 삽입하겠습니다.

               System.out.println(a);

 

               System.out.println(a.charAt(0));

               System.out.println(a.charAt(1));

               System.out.println(a.charAt(2));

               System.out.println(a.charAt(3));

               System.out.println(a.charAt(4));

               System.out.println(a.charAt(5));

 

               System.out.println("---------");

               StringBuffer b=new StringBuffer("");

               b.append("나라마");

               System.out.println(b);

               b.insert(0, 1);

               //int 1 삽입

               System.out.println(b);

               b.insert(3, 1.1);

               //double 1.1 삽입

               System.out.println(b);

               b.insert(5,'');

               //char형태 삽입

               System.out.println(b);

        }

 

}


<결과물>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.


반응형
반응형

이번 시간에는 StringBuffer 클래스의 delete(int start, int end) 메소드를 확인해보도록 하겠습니다. 우선, StringBuffer 클래스는 String 클래스와는 다르게 정적 문자열이라는 특징을 가지고 있습니다. 

예를들어, String 클래스의 변수 a가 ="123"; 이면, 이 a는 변함이 없지만, StringBuffer 클래스의 a는 변할 수 있다는 특징이 있습니다. 다만, 이 StringBuffer는 new를 이용하여 새로운 객체를 생성하여야 합니다.


다음으로 delete(int start, int end)메소드에 대해서 확인하도록 하겠습니다.

delete(int start, int end)


delete(int start, int end) 메소드는 StringBuffer 클래스에 속한 메소드이며, 문자열을 삭제할 수 있습니다. 예를들어, a="123456"; 이 있다면 delete(int start, int end)메소드를 이용하면 "34"를 지우고 a="1256" 으로 됩니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기04;

 

public class a03 {

 

        public static void main(String[] args) {

 

               StringBuffer a=new StringBuffer("1234567");

               //새로운 StringBuffer 객체를 생성합니다.

               System.out.println(a.charAt(0));

               System.out.println(a.charAt(1));

               System.out.println(a.charAt(2));

               System.out.println(a.charAt(3));

               System.out.println(a.charAt(4));

               System.out.println(a.charAt(5));

               System.out.println(a.charAt(6));

       

               System.out.println("---------");

 

               a=a.delete(0,1);

               System.out.println(a);

              

               System.out.println("---------");


               for(int i=0;i<a.length()-1;)

               //i 증감요소는 없습니다. 그러면 무한루프를 돌겠지만 Sys.out a.length요소가 delete 하면 점점 없어져서 출력할 요소가 없습니다.

               {

                       a=a.delete(0,1);

                       //만약 위의 delete요소가 없다면 a.length 6으로 한정되서 계속 출력이 되겠지만 하나씩 없어지면 언젠가 0 되어 출력이 없겠지요.

                       System.out.println("String a 길이는 변해서: " +a.length()+ " 입니다");

                      

               }

                      

       

        }

 

}


<결과물>


자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.


반응형

'JAVA-클래스의 중요메소드 > StringBuffer클래스' 카테고리의 다른 글

JAVA-중요04-insert()  (0) 2018.07.02
JAVA-중요02-reverse()  (0) 2018.07.02
JAVA-중요01-append()  (0) 2018.07.01
반응형

이번 시간에는 StringBuffer 클래스의 reverse() 메소드를 확인해보도록 하겠습니다.

우선, StringBuffer 클래스는 String 클래스와는 다르게 정적 문자열이라는 특징을 가지고 있습니다. 

예를들어, String 클래스의 변수 a가 ="123"; 이면, 이 a는 변함이 없지만, StringBuffer 클래스의 a는 변할 수 있다는 특징이 있습니다. 다만, 이 StringBuffer는 new를 이용하여 새로운 객체를 생성하여야 합니다.


다음으로 reverse()메소드에 대해서 확인하도록 하겠습니다.

reverse()


reverse()메소드는 StringBuffer 클래스에 속한 메소드이며, 문자열을 역순으로 나타내줍니다.

예를들어, a="123"; 이 있다면 reverse()메소드를 이용하면 a="321"로 됩니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기04;

 

public class a02 {

 

        public static void main(String[] args) {

 

               StringBuffer a=new StringBuffer("123");

               //우선 StringBuffer 객체를 생성합니다.

               a=a.reverse();

              

               System.out.println(a);

              

              

               a=a.append("456");

               //reverse a "123" String 추가한 것입니다.

               //정적 StringBuffer 이므로 계속적으로 a변수의 값은 변하게 됩니다.

               System.out.println(a);

              

               a=a.reverse();

               //새롭게 append 321456 reverse해줍니다. 그결과는 321456 아닌 654123 되겠습니다.

               System.out.println(a);

               System.out.println("-----------");

              

              

              

              

               String c="123";

               String d="456";

               //String 클래스에는 StringBuffer 메소드가 적용되지 않습니다.

       

               String e=c+d;

               System.out.println(e);

               //String에서는 append 기능을 + 연산자가 수행하고 있습니다.

               //+연산자로 StringBuffer StringBuilder 이용하여 다시 새로운 형태의 변수를 만듭니다.

              

        }

 

}


<결과물>


자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.


반응형
반응형

이번 시간에는 StringBuffer 클래스의 append() 메소드를 확인해보도록 하겠습니다.

우선, StringBuffer 클래스는 String 클래스와는 다르게 정적 문자열이라는 특징을 가지고 있습니다. 

예를들어, String 클래스의 변수 a가 ="123"; 이면, 이 a는 변함이 없지만, StringBuffer 클래스의 a는 변할 수 있다는 특징이 있습니다. 다만, 이 StringBuffer는 new를 이용하여 새로운 객체를 생성하여야 합니다.


다음으로 append()메소드에 대해서 확인하도록 하겠습니다.

append()

append(boolean)

append(int)

append(long)

append(float)

append(double)

append(char)

append(string)


append는 기존 문자열의 뒤쪽에 문자열을 추가하는 기능을 가지고 있습니다. 

예를들어, StringBuffer a="123"; 이 있다면 append("4"); 기능으로 a="1234"라는 값을 가지게 됩니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기04;

 

public class a01 {

 

        public static void main(String[] args) {

 

               String a = "안녕하세요";

               StringBuffer ab = new StringBuffer("123");

               // StringBuffer 객체를 생성합니다.

               ab.append(a);

               System.out.println(ab);

               // StringBuffer StringBuilder 비해 느린 성능을 가지고 있지만 멀티쓰레드를 지원합니다.

 

               ab.append(a);

               System.out.println(ab);

               // abc라는 변수는 현재 "123안녕하세요" 동적 문자열임을 있습니다.

               // 이것은 String 클래스의 정적 문자열과는 차이점이 있습니다.

 

               StringBuilder abc = new StringBuilder("123");

               // StringBuilder 객체를 생성합니다.

               abc.append(a);

               System.out.println(abc);

               // StringBuilder StringBuffer 비해 빠른 성능을 가지고 있지만 멀티쓰레드를 지원하지 않습니다.

 

               abc.append(a);

               // abc라는 변수는 현재 "123안녕하세요" 동적 문자열임을 있습니다.

               // 이것은 String 클래스의 정적 문자열과는 차이점이 있습니다.

               System.out.println(abc);

              

              

               System.out.println("--------------");

              

               StringBuffer abcd=new StringBuffer("1");

               abcd.append('1');

               System.out.println(abcd);

               abcd.append(1);

               System.out.println(abcd);

               abcd.append("1");

               System.out.println(abcd);

               abcd.append(0.1);

               System.out.println(abcd);

              

               System.out.println("--------------");

              

               String c="123";

               String d="456";

               //String 클래스에는 StringBuffer 메소드가 적용되지 않습니다.

       

               String e=c+d;

               System.out.println(e);

               //String에서는 append 기능을 + 연산자가 수행하고 있습니다.

               //+연산자로 StringBuffer StringBuilder 이용하여 다시 새로운 형태의 변수를 만듭니다.

        }

 

}



<결과물>



자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.


반응형
반응형

이번 시간에는 String 클래스의 valueOf() 메소드를 확인해보도록 하겠습니다.


valueOf(boolean)

valueOf(double)

valueOf(float)

valueOf(int)

valueOf(long)

valueOf(String)


위의 valueOf() 메소드는 ()괄호 안의 해당 객체를 String 객체로 변환시키는 역활을 합니다. 말그대로 String의 객체로 형변환입니다. 


예를들어 정수인 int a=5; 라면 이것을 String의 객체로 표현하고 싶으면 valueOf(5); 를 이용하면 5라는 정수는 String이라는 "5" 로 인식하게 됩니다. 이렇듯 어떤 객체를 String으로 형변환하는 valueOf() 메소드입니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T17 {

 

        public static void main(String[] args) {

 

               String a = "1234";

               String b = String.valueOf(10);

               String c = String.valueOf(a);

               String d = String.valueOf(true);

               String e = String.valueOf(false);

               //String.valueOf int형이든 double형이든 boolean형이든 String객체로 만든다.

              

               System.out.println(a);

               System.out.println(b);

               System.out.println(c);

               System.out.println(d);

               System.out.println(e);

 

              

               System.out.println(a + b);

               System.out.println(a + b + c);

               System.out.println(c + d);

               System.out.println(c + d + e);

               //a,b,c,d,e 모두 String 객체이므로 +연산자로 합치면 글자를 합친 결과와 같다.

        }

 

}


<결과물>


자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.


반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요12-연습  (0) 2018.06.29
JAVA-중요11-contains()  (0) 2018.06.29
JAVA-중요10-split()  (0) 2018.06.29
JAVA-중요09-trim()  (0) 2018.06.29
JAVA-중요08-toUpperCase()/toLowerCase()  (0) 2018.06.29
반응형

이번 시간에는 앞에서 배웠던 내용을 바탕으로 연습을 해보도록 하겠습니다.

우선, 과일이 나열된 문자열에서 파인애플이라는 단어가 있는지 확인하고 출력하는 연습을 해보도록 하겠습니다.


그전에 앞장에서 했던 length에 대해 확인하고 넘어가겠습니다.

 package 기본기03;

 

public class T15 {

 

        public static void main(String[] args) {

 

               String a = "12345";

               System.out.println(a.length());

               //String 문자의 길이

              

               String[] b = { "aa", "bb", "cc", "dd", "ee", "ff" };

               System.out.println(b.length);

               //배열원소의 개수

        }

 

}

<결과값>

5

6


그렇다면 이제 연습 예제를 살펴보겠습니다.

 package 기본기03;

 

public class T14 {

 

        public static void main(String[] args) {

 

               String a = "파인애플, 사과, 바나나, 포도, 수박, 레몬, 파인애플, 키위, 토마토, 방울토마토, , , , 오렌지";

               String[] b = a.split(", ");

               // String b 현재 사과/바나나/포도/수박/레몬/파이앤플/키위/토마토/방울토마토////오렌지로 나누어져있다.

 

               int j = 0;

               for (int i = 0; i < b.length; i++)

 

                       if (b[i].equals("파인애플")) {

                              j++;

                       } else {

 

                       }

               System.out.println("파인애플을 찾았습니다. 개수는: " + j);

        }

 

}


<결과물>


자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.





반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요13-valueOf()  (0) 2018.07.01
JAVA-중요11-contains()  (0) 2018.06.29
JAVA-중요10-split()  (0) 2018.06.29
JAVA-중요09-trim()  (0) 2018.06.29
JAVA-중요08-toUpperCase()/toLowerCase()  (0) 2018.06.29
반응형

이번 시간에는 String 클래스의 contains() 메소드를 확인해보도록 하겠습니다.


contains(String)

위의 contains() 메소드는 String 문자열이 해당 문자열을 포함하는지 여부를 묻는 메소드로 그 결과값으로 boolean값을 반환합니다. 


예를들어 String="abcde "; 존재한다면 contains() 메소드를 이용하여 "a"라는 문자가 있으면 true를 반환하고 없으면 false를 반환하는 메소드입니다. 이렇듯 String문자열이 어떤 문자를 포함하고 있는지 확인하는 contains() 메소드입니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T14 {

 

        public static void main(String[] args) {

 

               String a = "abcde";

 

               if (a.contains("b")) {

                       System.out.println("String a 문자 b 포함하고 있습니다.");

               } else {

                       System.out.println("String a 문자 b 포함하고 있지 않습니다.");

               }

 

               String b = "abcdefg";

               System.out.println(b.contains("b"));

               System.out.println(b.contains("h"));

               System.out.println(b.contains("ab"));

               System.out.println(b.contains("ac"));

 

              

        }

 

}


<결과값>

아래 예제는 equals()와 contains()메소드의 비교입니다.

 package 기본기03;

 

public class T14 {

 

        public static void main(String[] args) {

 

               String a = "abcde";

              

                       if (a.equals("a")) {

                              System.out.println("String a 문자 a 포함하고 있습니다.");

                       }

 

                       else if (a.equals("abcde")) {

                              System.out.println("String a 문자 abcde 포함하고 있습니다.");

                       }

 

                       else

 

                       {

                              System.out.println("이도저도아닙니다.");

                       }

                       // equals 메소드는 같은지 여부를 있지 contains 메소드처럼 포함을 확인할 없습니다.

        }

}


<결과물>

String a는 문자 abcde를 포함하고 있습니다.

 package 기본기03;

 

public class T14 {

 

        public static void main(String[] args) {

 

               String a = "abcde";

              

                       if (a.contains("a")) {

                              System.out.println("String a 문자 a 포함하고 있습니다.");

                       }

 

                       else if (a.contains("abcde")) {

                              System.out.println("String a 문자 abcde 포함하고 있습니다.");

                       }

 

                       else

 

                       {

                              System.out.println("이도저도아닙니다.");

                       }

                       // equals 메소드는 같은지 여부를 있지 contains 메소드처럼 포함을 확인할 없습니다.

        }

}

<결과물>

String a는 문자 a를 포함하고 있습니다.




자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요13-valueOf()  (0) 2018.07.01
JAVA-중요12-연습  (0) 2018.06.29
JAVA-중요10-split()  (0) 2018.06.29
JAVA-중요09-trim()  (0) 2018.06.29
JAVA-중요08-toUpperCase()/toLowerCase()  (0) 2018.06.29
반응형

이번 시간에는 String 클래스의 split() 메소드를 확인해보도록 하겠습니다.


split(String)

위의 split() 메소드는 String 문자열을 원하는 문자열을 기준으로 잘라서 배열의 형태로 추출가능합니다. 자르는 문자의 기준은 string이 가능한데 특수문자의 경우 \\을 붙여야 가능합니다.


예를들어 String="a1b1c1d1e "; 존재한다면 split() 메소드를 이용하면 1을 기준으로 배열[0]=a, [1]=b, [2]=c, [3]=d, [4]=e,로 추출가능합니다. 이렇듯 String문자를 어떤 기준으로 문자를 추출하는 split() 메소드입니다.




아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T12 {

 

        public static void main(String[] args) {

        //trim() 메소드는 문자열의 양쪽 공백을 없애주는 기능을 합니다.

              

               String a="a b c d e";

               String [] b= a.split(" ");

               System.out.println(b[0]);

               System.out.println(b[1]);

               System.out.println(b[2]);

               System.out.println(b[3]);

               System.out.println(b[4]);

               //결과값의 반환을 하나씩 입력

               System.out.println("-----");

              

               for(int i=0; i<5; i++)

               {

                       System.out.println(b[i]);

               }

              

               System.out.println("-----");

               //결과값의 반환을 for문을 이용하여 split 결과 a/b/c/d/e 5개이므로 b[0]~b[4]

               //하지만, 위의 방법에는 단점이 있다. 문장이 아주 길어진다면 어떻게 될까요. 0~4까지인지 확인이 불가능하다.

              

               String c=a.replace(" ", "");

               for(int j=0; j<c.length(); j++)

               {

                       System.out.println(b[j]);

               }

               //따라서 c라는 String이라는 값을 두고 공백을 제거한 것이므로 글자씩 split 경우에는 c.length()

               // length -1 값과 같다. 하지만 글자 이상의 String split 한다면 생각해야한다.

        }

 

}


<결과물>



자르는 문자의 기준은 string이 가능한데 특수문자의 경우 \\을 붙여야 가능합한데, 그에대한 예제를 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T13 {

 

        public static void main(String[] args) {

 

               String a = "a*b*c*d*e";

               String[] b = a.split("\\*");

               //특수문자의 경우 앞에 \\ 사용하지 않으면 split 되지 않는다.

              

               for (int i = 0; i < 5; i++) {

                       System.out.println(b[i]);

               }

 

        }

 

}


<결과물>

 package 기본기03;

 

public class T13 {

 

        public static void main(String[] args) {

 

               String a = "a1*b2*c3*d4*e5";

               String[] b = a.split("\\*");

               // 특수문자의 경우 앞에 \\ 사용하지 않으면 split 되지 않는다.

 

               for (int i = 0; i < 5; i++) {

                       System.out.println(b[i]);

               }

 

               String c = "a155b255c355d455e555";

               String[] d = c.split("55");

 

               for (int i = 0; i < 6; i++) {

                       System.out.println(d[i]);

               }

 

        }

 

}


<결과물>



자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.



반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요12-연습  (0) 2018.06.29
JAVA-중요11-contains()  (0) 2018.06.29
JAVA-중요09-trim()  (0) 2018.06.29
JAVA-중요08-toUpperCase()/toLowerCase()  (0) 2018.06.29
JAVA-중요07-substring()  (0) 2018.06.29
반응형

이번 시간에는 String 클래스의 trim() 메소드를 확인해보도록 하겠습니다.


trim()

위의 trim() 메소드는 String 문자열의 양쪽 공백을 제거해주는 기능을 합니다. 


예를들어 String=" abcde "; 존재한다면 trim() 메소드를 이용하면 "abcde"로 변경가능합니다.

이렇듯 해당 문자의 양쪽 공백을 제거하는 trim() 메소드입니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T12 {

 

        public static void main(String[] args) {

        //trim() 메소드는 문자열의 양쪽 공백을 없애주는 기능을 합니다.

              

               String a=" a b c d e ";

               System.out.println(a);

               System.out.println(a.trim());

               //결과값을 보시면 사이의 공백은 존재하지만 양쪽 공백은 사라진 것을 확인할 있습니다.

              

               String b=" 가나다라               ";

               System.out.println(b);

               System.out.println(b.trim());

               //결과값을 보시면 사이의 공백은 존재하지만 양쪽 공백은 사라진 것을 확인할 있습니다.

              

        }

 

}


<결과물>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요11-contains()  (0) 2018.06.29
JAVA-중요10-split()  (0) 2018.06.29
JAVA-중요08-toUpperCase()/toLowerCase()  (0) 2018.06.29
JAVA-중요07-substring()  (0) 2018.06.29
JAVA-중요06-replace()  (0) 2018.06.29
반응형

이번 시간에는 String 클래스의 toUpperCase()/toLowerCase() 메소드를 확인해보도록 하겠습니다.


toUpperCase()

toLowerCase()

위의 toUpperCase()/toLowerCase() 메소드는 String 문자열의 대소문자로 변경을 해주는 기능을 합니다. 

예를들어 String="abcde"; 존재한다면 "ABCDE"인 대문자로 변경하는 것은 toUpperCase()에 해당하며 String="ABCDE"; 존재한다면 "abcde"인 소문자로 변경하는 것은 toLowerCase()에 해당합니다. 이렇듯 해당 문자의 대소문자 변경을 하는 toUpperCase()/toLowerCase() 메소드입니다.



아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T11 {

 

        public static void main(String[] args) {

 

               String a = "abcdefg";

               String b = "ABCDEFG";

               //String 변수 a,b 생성 초기화

              

               System.out.println(a.toUpperCase());

               // toUpperCase() 메소드를 이용하여 소문자의 "abcdefg" 대문자 "ABCDEFG" 변환

               System.out.println(b.toLowerCase());

               // toUpperCase() 메소드를 이용하여 대문자의 "ABCDEFG" 소문자 "abcdefg" 변환

 

               System.out.println("--------");

               System.out.println(a.toUpperCase().toLowerCase().toUpperCase());

               // 변환을 계속해도 최종적으로 toUpperCase()이므로 대문자가 결과값으로 출력됨을 있습니다.

                System.out.println("--------");

              

               String c = "ewadsag";

               String d = "SDGWETWE";

              

               System.out.println(c.toUpperCase());

               System.out.println(d.toLowerCase());

 

              

              

              

        }

 

}


<결과물>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.


반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요10-split()  (0) 2018.06.29
JAVA-중요09-trim()  (0) 2018.06.29
JAVA-중요07-substring()  (0) 2018.06.29
JAVA-중요06-replace()  (0) 2018.06.29
JAVA-중요05-lastIndexOf()  (0) 2018.06.28
반응형

이번 시간에는 String 클래스의 substring() 메소드를 확인해보도록 하겠습니다.


substring(int 시작점)

substring(int 시작점, int 끝점 앞)

위의 substring() 메소드는 String 문자열 중 특정 index부터 문자열을 추출하는 역할을 합니다. 예를들어 String="abcde"; 존재한다면 a는 0의 index를 가지고 있고 b가 1의 index를 가지고 있습니다. 

"abcde".substring(2); 를 한다면 2의 index부터 문자를 추출합니다. "cde" 가 추출됩니다. 이렇듯 해당 문자를 추출할 수 있는 기능이 substring() 메소드 입니다. 



아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T6 {

 

        public static void main(String[] args) {

 

               String a = "abcdef";

               String b = a.substring(2);

               System.out.println(b);

 

               System.out.println(a.substring(0));

               System.out.println(a.substring(1));

               System.out.println(a.substring(2));

               System.out.println(a.substring(3));

               System.out.println(a.substring(4));

               // 위는 substring(int 추출 시작점) 괄호안의 문자 추출입니다.

 

               System.out.println("------------------");

               System.out.println(a.substring(0, 1));

               System.out.println(a.substring(0, 2));

               System.out.println(a.substring(0, 3));

               System.out.println(a.substring(0, 4));

               System.out.println(a.substring(0, 5));

 

               System.out.println(a.substring(0, 6));

               System.out.println(a.substring(1, 5));

               // 위는 (int 추출 시작점, int 추출 끝점앞) 입니다.

 

        }

}


<결과물>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.



반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요09-trim()  (0) 2018.06.29
JAVA-중요08-toUpperCase()/toLowerCase()  (0) 2018.06.29
JAVA-중요06-replace()  (0) 2018.06.29
JAVA-중요05-lastIndexOf()  (0) 2018.06.28
JAVA-중요04-indexOf()  (0) 2018.06.28
반응형

이번 시간에는 String 클래스의 replace() 메소드를 확인해보도록 하겠습니다.


replace(char, char)

replace(String, String)

위의 replace() 메소드는 String 문자열 중 해당하는 char 문자를 새로운 char로 변경하는 것입니다.

예를들어 String="abcde"; 존재한다면 "a" 또는 'a'의 문자를 새로운 "b" 또는 'b' 로 변경하면 String a="bbcde"로 바뀌게 됩니다.이렇듯 해당 문자를 변경할 수 있는 기능이 replace() 메소드 입니다. 


아래 예제를 통하여 더 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T6 {

 

        public static void main(String[] args) {

 

               String a = "abcd-abcd";

 

               System.out.println(a.replace("a", "b"));

               System.out.println(a.replace('a', 'b'));

               //작은따옴표나 큰따옴표로 char이든 string이든 가능함

               //replace String 클래스의 메소드로 앞의 문자를 뒤로 대체하는 것입니다.

              

               String b="a b c d e 공백";

               System.out.println(b.replace(" ", "1"));

               //공백 또한 string 문자열에 속한다는 것을 알아야 합니다. 그래서 replace 대체가능합니다.

              

               String c=b.replace(" ", "^");

               System.out.println(c);

              

        }

}


<결과물>


자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.




반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요08-toUpperCase()/toLowerCase()  (0) 2018.06.29
JAVA-중요07-substring()  (0) 2018.06.29
JAVA-중요05-lastIndexOf()  (0) 2018.06.28
JAVA-중요04-indexOf()  (0) 2018.06.28
JAVA-중요03-charAt()  (0) 2018.06.28
반응형

이번 시간에는 String 클래스의 lastIndexOf() 메소드를 확인해보도록 하겠습니다.


lastIndexOf(char, char)

lastIndexOf(String, String)

위의 lastIndexOf() 메소드는 String 문자열 중 뒤에서 부터 해당하는 char 문자를 지정하여 index를 반환합니다. 

예를들어 String="bcada"; 존재한다면 'a'의 char는 뒤에서부터 보면 (앞에서부터) 4번째 있는 것을 알 수 있습니다. 이렇듯 해당 문자를 뒤에서 부터 찾아서 index번호를 추출할 수 있는 기능이 lastIndexOf() 메소드 입니다. 또한, 해당 char나 string을 찾지 못하였다면 -1을 반환합니다.


아래 예제를 통하여 더 살펴보도록 하겠습니다.


 package 기본기03;

 

public class T6 {

 

        public static void main(String[] args) {

 

               String a = "abcd-abcd";

 

               System.out.println(a.lastIndexOf("a"));

               System.out.println(a.lastIndexOf("b"));

               // 앞의 0,1번째의 index ab 아닌 뒤에있는 5,6번째의 index 반환합니다.

 

               System.out.println(a.lastIndexOf("cd"));

               System.out.println(a.lastIndexOf("ab"));

               //String 문자열 또한 index 있습니다.

              

               System.out.println(a.lastIndexOf(a.charAt(a.length() - 1)));

               // 위는 마지막 d 문자의 index 있습니다.

 

        }

}


<결과물>



lastIndexOf(찾는 문자, int from);

위는 String 문자열 중 int from을 사용하여 from의 index 위치부터 문자열을 찾겠다는 것입니다.

아래 예제를 통하여 살펴보도록 하겠습니다.

 package 기본기03;

 

public class T6 {

 

        public static void main(String[] args) {

 

               String a = "abcd-abcd";

 

               System.out.println(a.lastIndexOf("a", 4));

               System.out.println(a.lastIndexOf("b", 4));

               // String a 4번째 index - 에서부터 a 0번째 b 1번째 index 있다.

 

        }

}


<결과물>


자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'JAVA-클래스의 중요메소드 > String클래스' 카테고리의 다른 글

JAVA-중요07-substring()  (0) 2018.06.29
JAVA-중요06-replace()  (0) 2018.06.29
JAVA-중요04-indexOf()  (0) 2018.06.28
JAVA-중요03-charAt()  (0) 2018.06.28
JAVA-중요02-length()/length  (0) 2018.06.21