[macOS] 맥 ip주소 확인하기


컴퓨터를 사용하다보면 자신의 ip주소를 확인해야하는 경우가 간혹 있습니다.

 

이런 상황을 위해 오늘은 macOS에서 ip주소를 확인하는 방법에 대해서 알아보도록 하겠습니다.

(여기서 저는 3가지의 방법으로 확인하는 방법을 설명하도록 하겠습니다.)

자신이 전문가라면 두번째 및 세번째 방법을 추천드립니다. (터미널-ifconfig, 시스템 리포트)

 

첫번째 방법 (시스템 환경설정 사용)

 - 첫번째 방법은 가장 추천드리는 방법으로, 제가 알고있는 방법중에선 제일 알아보기 편하고 확인하기도 편한 것 같습니다.

  -> 혹시라도 DNS정보 라우터 정보 등등을 확인하시고 싶으시다면 세번째 방법을 활용해주세요.

 - 확인방법 : 상단 wifi 아이콘 -> 네트워크 환경설정 열기... -> Wi-Fi 혹은 이더넷 등 (본인의 연결된 상태에 따라) - 추천

 - 확인방법 : 시스템 환경설정 -> 네트워크 -> Wi-Fi 혹은 이더넷 등 (본인의 연결된 상태에 따라)

빨간색상자에서 본인의 ip주소를 확인하실 수 있습니다.

 

 두번째 방법 (터미널 사용 - ifconfig)

 - 두번째 방법은 리눅스와 비슷한 만큼 터미널을 사용하면 ifconfig 명령어도 사용이 가능하다는걸 이용하는 겁니다.

  -> 다만, 텍스트형식으로 복잡하게 나와 알아보기 힘들 수 있으므로 추천하지 않습니다. (어느정도 파악이 가능하신 분에게 추천합니다.) 

 - 확인방법 : Dock -> Launchpad -> 기타 -> 터미널 -> ifconfig 입력 후 엔터

터미널에 ifconfig를 입력하면 아래 내용이 촤르륵!

 

세번째 방법 (시스템 리포트 사용)

 - 세번째 방법은 시스템 리포트를 사용하여 확인하는 방법입니다. 두번째 방법보다는 더 알아보기 쉬우며, 첫번째 방법보다는 더 많은 정보를 얻을 수 있다고 생각하시면 될 것 같습니다.

 - 확인 방법 :  -> 이 맥에 관하여 -> 시스템 리포트 -> 네트워크

빨간색 박스를 확인하시면 자신의 ip주소를 확인할 수 있습니다.

 

 

맥에서 ip주소를 확인하는 방법 세가지를 알아봤는데요, 제가 알기론 이 세가지정도라서 추가적으로 있다면 댓글 남겨주세요!

추후에 추가하도록 하겠습니다.

 

 

버전정보 (v1.1)

 - v1.0 2020.06.23 배포

 - v1.1 2020.07.09 제목 수정

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 


macOS 11 빅 서(Big Sur) 지원기기 목록


오늘 Apple의 WWDC 발표 이후 macOS 11버전 지원기기 목록이 애플 공식 홈페이지를 통해 공지되었습니다.

 

사실 이번 WWDC에서 하드웨어를 발표하지 않은 점에서 놀랐지만,

영상에 잠시나마 제가 그토록 궁금해하던 ARM기반 프로세서에 대해서 언급이 되었는데,

내내 macOS 테스트로 나온 디바이스가 ARM(Apple Silicon)기반 프로세서를 탑재한 디바이스라고하여 충격적이긴 했습니다.

ARM이라고해서 느리지 않다는걸 보여주고 싶었을까요? 꽤나 괜찮아 보였습니다.

(문제는 가격이 어떨지..)

 

또한 이전 버전이 10.15였던것에 비해 11버전으로 올라가게 되었는데, 아마 Apple Silicon을 위함이 아닐까 싶습니다.

 

잡소리가 길어졌습니다만, macOS 11 빅 서의 지원기기 목록을 살펴보겠습니다.

 

 - macOS 11 빅 서(Big Sur) 지원기기 목록

MacBook 2015 and later 
MacBook Air 2013 and later 
MacBook Pro Late 2013 and later 
Mac mini 2014 and later 
iMac 2014 and later 
iMac Pro 2017 and later 
Mac Pro 2013 and later 

 

- MacBook 모델 목록

- MacBook Air 모델 목록

- MacBook Pro 모델 목록

- Mac mini 모델 목록

- iMac 모델 목록

- Mac Pro 모델 목록

 

* macOS 11 Big Sur 지원기기 목록은 애플 공식홈페이지(미국)에서도 확인하실 수 있습니다. (거의 하단)

 

여담으로 제가 사용중인 기기로는

MacBook Pro(2012), MacBook Air(2013), Mac mini(2020)이 있으나,

이번에는 MacBook Pro(2012)는 지원기기 목록에서 빠져있네요 ㅠ,ㅠ..

그래도 MacBook Air(2013)은 지원기기 목록에 들어가 있으니 그나마 낫네요 ㅠㅠ

(MacBook Air(2013)도 언젠가는 지원기기 목록에서 빠지겠지만..)

 

 

버전정보 (v1.0)

 - v1.0 2020.06.23 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 


iOS 14/iPadOS 14 지원기기 리스트 정리!

(WatchOS 7 지원기기 포함!)


오늘 새벽 2시경 WWDC에서 iOS 14를 지원하는 기기가 발표되었습니다.

공개된 영상은 1시간 48분 51초이며, 약 2시간가량 iOS 14의 업데이트된 항목들을 설명하고 있습니다.

 

루머상으로는 iOS 14가 iPhoneOS 14로 변경될 것이라는 이야기가 나왔었는데, 이번 발표를 통해 확인해보니 그렇지는 않은 모양입니다.

 

애플 공식홈페이지(미국)을 참조해보시면(거의 하단) 이번 iOS 14의 지원기기 리스트가 나와있어 정리해보았습니다.

(iPadOS 14 지원기기 리스트도 공식홈페이지(미국)을 참조해보시면(거의 하단) 전부 나오고 있습니다.)

 

- iOS 14 지원기기 리스트

지원기기 초기 iOS 버전 칩셋/메모리 정보
iPhone 11 iOS 13.0 Apple A13 / 4GB
iPhone 11 Pro iOS 13.0 Apple A13 / 4GB
iPhone 11 Pro Max iOS 13.0 Apple A13 / 4GB
iPhone Xs iOS 12.0 Apple A12 / 4GB
iPhone Xs Max iOS 12.0 Apple A12 / 4GB
iPhone Xr iOS 12.0 Apple A12 / 3GB
iPhone X iOS 11.1 Apple A11 / 3GB
iPhone 8 iOS 11.0 Apple A11 / 2GB
iPhone 8 Plus iOS 11.0 Apple A11 / 3GB
iPhone 7 iOS 10.0 Apple A10 / 2GB
iPhone 7 Plus iOS 10.0 Apple A10 / 3GB
iPhone 6s iOS 9.0 Apple A9 / 2GB
iPhone 6s Plus iOS 9.0 Apple A9 / 2GB
iPhone SE (1st generation) iOS 9.3 Apple A9 / 2GB
iPhone SE (2st generation) iOS 13.4 Apple A13 / 3GB
iPod touch (7th generation) iOS 12.3 Apple A10 / 2GB

* iOS 14 지원기기는 iOS 13 지원기기와 동일합니다!

저의 경우 iPhone Xr, SE(1st, 2st gen)을 가지고 있기 때문에 제가 가진 모든 기기가 지원기기 리스트에 들어 있어 기쁘네요.

 

 - iPadOS 14 지원기기 리스트

지원기기 초기 iOS/iPadOS 버전 칩셋 / 메모리 정보
iPad Pro 12.9-inch (4th generation) iPadOS 13 Apple A12Z / 6GB
iPad Pro 11-inch (2nd generation) iPadOS 13 Apple A12Z / 6GB
iPad Pro 12.9-inch (3th generation) iOS 12.1 Apple A12X / 4GB or 6GB
iPad Pro 11-inch (1st generation) iOS 12.1 Apple A12X / 4GB or 6GB
iPad Pro 12.9-inch (2nd generation) iOS 10.3 Apple A10X / 4GB
iPad Pro 12.9-inch (1st generation) iOS 9.1 Apple A9X / 4GB
iPad Pro 10.5-inch iOS 10.3 Apple A10X / 4GB
iPad Pro 9.7-inch iOS 9.3 Apple A9X / 2GB
iPad (7th generation) iPadOS 13.1 Apple A10 / 3GB
iPad (6th generation) iOS 11.3 Apple A10 / 2GB
iPad (5th generation) iOS 10.3 Apple A9 / 2GB
iPad mini (5th generation) iOS 12.2 Apple A12 / 3GB
iPad mini 4 iOS 9.0 Apple A8 / 2GB
iPad Air (3rd generation) iOS 12.2 Apple A12 / 3GB
iPad Air 2 iOS 8.1 Apple A8X / 2GB

* iPadOS 14 지원기기 또한 iPadOS 13 지원기기와 동일합니다!

iPad Air 2의 경우 iOS 8.1부터 시작해서 엄청 오래 지원기기 리스트에 들어가 있습니다.(축하드립니다!)

저는 오래된 iPad Pro 9.7-inch를 사용중에 있어 지원기기에 들어가서 안도랄까, 기쁘달까 어쨌든 아직은 더 써먹을 수 있어서 좋네요!

 

 

 - WatchOS 7 지원기기 목록

지원기기 초기 WatchOS 버전
Apple Watch Series 3 WatchOS 4.0
Apple Watch Series 4 WatchOS 5.0
Apple Watch Series 5 WatchOS 6

저는 Apple Watch Series 3를 사용중에 있어서 이번 업데이트도 지원되네요!

 

 

이번에 발표된 지원기기 목록은 전부 애플 공식홈페이지(미국)를 통해 확인하실 수 있으시며,

저의 경우 제가 소유한 모든 애플 디바이스를 지원하여 지금 정말 굉장히 만족스러운 상태입니다 ㅋ_ㅋ

이 글을 보시는 모든 분들의 디바이스도 지원기기 목록에 들어가 있으면 좋겠네요!

 

 

버전정보 (v1.0)

 - v1.0 2020.06.23 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 


Sidecar를 사용하며 얻은 깨달음

(MacOS - iPadOS)


얼마전 에어팟을 사용하며 알게된 재밌는 사실 한가지.

한쪽만 끼우는거랑 양쪽 끼우는거랑 나오는 소리가 모노/스테레오로 들리는겁니다.

딱히 검색해보진 않았지만 듣고 좀 충격이었습니다 ㅋㅋ..

분명 한쪽만 끼울때랑 양쪽 끼울때랑 다른데? 싶었는데

나중에 실험해보니 한쪽이 충전중이며 한쪽을 끼운상태라면 모노로,

양쪽 다 꺼내서 들을땐 스테레오로 들리더라구요.

 

어이쿠 같은 애플이라고 또 말이 길어졌네요.

 

오늘은 에어팟처럼 개인적으로 애플의 Sidecar를 사용하면서 얻은 깨달음을 몇가지 적고자 합니다.

(물론 아시는분들은 아시겠지만 ㅋㅋ)

 

1. Sidecar는 MacOS - iPadOS간에 로그인 된 계정이 다르다면 연결이 되지 않는다.

 - 네. 연결이 안됩니다.

저의 경우 회사 맥미니와 제 개인 맥미니 계정이 다른데, 개인 아이패드 프로(1세대)를 계정이 다른 회사 맥미니와 연결을 해보니 연결이 안되었습니다. 

음.. 될줄알았는데.. 그래도 집에서는 잘 활용하고 있습니다.

 

2. 앱스토어의 Duet Display와 격이 다르다.

 - 음.. 우선 Duet Display를 까는건 절대 아닙니다.

제 개인적으로 돈주고 구매해서 잘 활용했기에 그 점에 있어서는 아쉬움 없습니다.

단순히 제가 가진 어플을 Sidecar와 비교가 되었을 뿐이라는 점을 미리 알아주셨으면 좋겠습니다~

윈도우 연결을 할 수 있다는 점에서는 Duet이 확실히 괜찮아 보일 수 있겠으나,

MacOS - iPadOS간의 연결을 따지면 Sidecar만한게 없습니다.

사실 Sidecar를 사용하면서 여태 Duet Display를 어떻게 써먹었지 싶을 정도로 느립니다.. 버벅이고..

나름 12,000원 주고 구입한 앱이긴 하지만, 아쉽긴 하네요. (그래도 쓸 만큼 썼습니다!)

그래도 Duet는 윈도우 연결이 되기 때문에 제가 쓰는 윈도우 태블릿(Miix520)에 연결해서 쓰는 용도론 딱이라서 앞으로도 사용은 할 것 같습니다.(Window-iPad 연결용도)

참고로 Sidecar를 wifi로 연결해도 Duet Display 유선보다 훨씬 빠릅니다.

(혹시라도 구입 고민중이시라면 참고되셨으면 해서.. - 이는 제 디바이스만의 문제일 수 있음을 알려드립니다.)

그 느낌은 돈 많은 집주인이 리모델링을 하느냐 내집도 아닌 세입자가 리모델링을 하느냐의 차이? 

 

3. 그래도 영상재생까지는 써먹을 수 있겠다. (추천하진 않지만)

 - Youtube재생해봤는데 나름 볼만하더라구요.

저는 음악틀어놓고 개발하는 타입이라서 Sidecar이용해서 Yotube 뮤직비디오 <-> ppt등을 켜놓고

보조모니터로 엄청 잘 활용중에 있습니다.(27인치 주 모니터 1, 27인치 주 모니터 2, Sidecar 보조 모니터 3)

개인적인 생각이지만 Sidecar에 인강같은거 틀어놓고 주 모니터로는 원하는 작업해도 괜찮을 것 같습니다.

(usb연결 한정)

 

4. usb연결이 아닌 wifi연결로도 충분히 활용 가능하다.

 - 저는 usb와 wifi연결에 큰 차이를 못느끼겠더라구요. 

참고로 공유기는 ipTIME A8004T를 사용중에 있습니다.

무선의 활용이 가능한 만큼 위치적 요건 또한 usb의 한계에 두지 않아도 되어 굉장히 편리하다 생각들었습니다.

이는 Duet Display도 가능한 부분이지만, 정말 급하거나, 어쩔 수 없는 상황 이외에는

wifi를 통한 연결은 정신건강상 추천하지 않습니다. (Duet Display)

(특히 고해상도는 하지마세요. 자신도 모르게 아이패드가 형체도 없이 사라질 수 있습니다...)

 

5. 태블릿의 키보드 / 애플펜슬로 입력이 가능하다.

 - 저는 아이패드 프로 1세대(9.7)를 사용하고 있습니다.

추가로 아이패드 정품 키보드와 애플펜슬(1세대)도 사용중에 있습니다.

물론 그림을 그리는건 무리가 있어보이지만, 여차할때 입력용으로 써먹기 좋더라구요. (애플펜슬)

특히 사인같은거 필요할때 쓱싹쓱싹 활용하기 좋았으며,

가끔 본 키보드를 사용하기 힘들때 보조 입력수단으로 활용하기도 괜찮았습니다.

아이패드 정품 키보드의 경우에는 생각보다 입력 딜레이는 거의 없었습니다.

(참고로 지금 아이패드 키보드로 게시글 작성중입니다 ㅋ_ㅋ)

 

* 혹시라도 이 글을 보고 Duet Display를 망설이시는 분들에게!

Duet Display가 무작정 나쁘다는 건 아닙니다!! 상황에 따라 구매하시면 좋을 것 같아요!!

Window를 연결하셔서 사용하실거라면 추천드립니다. 네, 정말 쓸만합니다!

또한 Mac도 지원하는 기종이 다르기 때문에 지원하지 않는 모델은 Duet Display 추천합니다!

저는 Window에서도 쓰고, 맥북 프로(2012)와 맥북 에어(2013)이 Sidecar를 지원하지 않아 구매했었습니다.

(광고글 아닙니다. 그냥 제 돈 주고 사본 바로는 쓸만하다는 추천이예요.)

 

 

버전정보 (v1.0)

 - v1.0 2020.06.23 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 

 


맥에 필요한 프로그램

- Macs Fan Control -


오늘은! 맥북 및 맥 등 MacOS를 쓰시는 분들에게는 설치하시면 좋은 프로그램을 가지고 왔습니다.

(사실 예전부터 사용은 했었는데.. 맥미니 세팅하면서 생각나서 써봅니다 ㅋ_ㅋ...)

 

맥 디바이스의 CPU 등의 온도를 측정해주는 Macs Fan Control이 그것인데요,

저의 경우 맥북프로(2012), 맥북에어(2013), 맥미니(2020)에 설치하여 잘 활용하고 있습니다.

 

프로그램 다운로드는 Macs Fan Control 사이트(링크)에서 다운로드하여 설치하시면 됩니다.

 

Macs Fan Control Download for macOS & Windows (Boot Camp)

 

crystalidea.com

 

중앙에 있는 Download for macOS 버튼을 눌러 설치!

 

설치는 비교적 간단하며, 설치가 완료되면 하단의 이미지처럼 상태표시창에서 확인하실 수 있습니다. (와이파이 아이콘의 왼쪽)

Macs Fan Control

 

아래는 프로그램 설치 후 실행한 이미지입니다. (날이 더워서 55~60도는 그냥 올라가네요...)

Macs Fan Control (free버전)

 

Fan의 최소/현재/최대 RPM을 확인할 수 있으며, CPU코어당 온도와 GPU 및 메모리 등의 온도를 확인하실 수 있습니다.

사용자 지정을 통해 RPM조정 또한 가능하지만, 저는 굳이 시끄럽진 않아서 설정은 안해뒀습니다.

우측 하단의 환경설정을 통해 온도를 정확하게 표시할 수도 있습니다만, 이 또한 굳이 정확할 필요는 없어서 사용은 하지 않습니다.

(사실 저는 간혹가다 시끄럽다 싶으면 온도 확인하는 용도로 쓰고, 어쩌다 한번 도서관같은 곳에서는 RPM을 낮추기도 하지만,

보통은 온도 파악해서 너무 높다 싶으면 써멀구리스 재도포용으로 사용중에 있습니다.)

자신의 맥 디바이스의 온도를 측정하시고 많이 높다 싶으시다면 써멀구리스를 재도포하는것을 추천해드립니다.

 

(저 같은 경우 맥북 프로(2012) 및 맥북 에어(2013)의 CPU 써멀구리스 재도포는 1년~2년주기로 진행하고 있습니다.

개인적으로 아직까지는 가성비는 ARTIC사의 MX-4를, 지갑여유가 되신다면 곰써멀을 추천드립니다.

참고로 저는 MX-4를 자주 사용중에 있습니다. -> 워낙 자주 발라대서..)

 

 

버전정보 (v1.0)

 - v1.0 2020.06.22배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com


[Swift] 네비게이션 바의 하단 그림자(line) 제거하기

(Custom Navigation Bar)


iOS 개발 중 네비게이션 바를 커스텀하여 뒤에 있는 배경과 같은 색상으로 지정해주고 하단 그림자(혹은 선, line)까지 제거해야하는 경우가 있습니다.

오늘은 네비게이션 바의 하단 그림자 제거하는 방법을 알아보려합니다.

 

코드를 먼저 살펴보시죠.

 

코드 (Swift5 대응)

navigationBar.setBakcgroundImage(UIImage(), for : UIBarMetrics.default)
navigationBar.shadowImage = UIImage()

 

navigationBar에 setBackgroundImage 함수 설정과, shadowImage 변수 설정만 초기화해주시면 그림자가 제거되는 것을 확인하실 수 있습니다.

 

그림자는 배경이미지가 있는 경우 기본적으로 그림자 이미지가 사용되는 모양입니다.

따라서 아무 값을 넣지 않는 객체 UIImage로 BackgroundImage와 shadowImage를 초기화하면 빈 이미지를 가진 객체로 선언되어 그림자가 들어가지 않게 됩니다. 

 

버전정보 (v1.0)

 - v1.0 2020.06.20 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

* Karzin은 항상 공부중입니다. 설명이 틀리거나 잘못된 부분이 있다면 의견내주시는대로 수정하도록 하겠습니다.

 

Karzin

abbeea@naver.com

 


[Database] 데이터 모델이란?


오늘은 데이터 모델에 대해서 알아보는 시간을 가지고자 합니다.

 

데이터 모델 (Data Model)

A set of Symbols == 모든 Symbol들의 집합

 - 모든 심볼드의 집합으로 컴퓨터에 데이터를 저장하는 방식을 정의해 놓은 개념 모형

 - 대표적으로 계층형, 네트워크형, 관계형, 객체지향형 등

 

데이터 모델의 종류

 

데이터 모델링 (Data Modeling)

All Process == 모든 프로세스

 - 현실세계에서 스토리지로 저장하기 위한 모든 프로세스

 - 현실 -> Data Modeling -> DB

 

데이터 모델링

 

 - Conceptinal Modeling (개념적 데이터 모델링)

    -> 추상화 수준이 높고 업무중심적

    -> 포괄적인 수준의 모델링 진행

    -> EA 수립시 많이 이용 (E-R Modeling)

 

 - Logical Modeling (논리적 데이터 모델링)

    -> 시스템으로 구축하고자하는 업무에 대해 Key, 속성, 관계 등 정확히 표현

    -> 재사용성이 높음

    -> Relational (관계형)

 

 - Physical Modeling (물리적 데이터 모델링)

    -> 실제로 데이터 베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계

    -> File, MetaDataFile, PhysicalDataFile

 

** 그림에 사용된 글자체는 네이버 나눔글꼴의 나눔스퀘어 Bold입니다.

 

버전정보 (v1.0)

 - v1.0 2020.06.19 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

 

Karzin

abbeea@naver.com


[자료구조]Java로 Stack 구현해보기 (List 활용)


지난시간에 자료구조 파헤치기를 통해 Stack 구조에 대해서 정리해보았습니다. (페이지로)

 

이번에는 Stack구조를 Java로 만들어 보려합니다. (List 활용)

어렵지 않게 단순히 데이터를 저장할 Stack변수와 Pop 함수 및 Push 함수를 구현해 볼까 합니다.

 

아래는 개발전 설계한 Class-Diagram입니다.

Stack의 Class-Diagram

Class-Diagram 설명

 - stack 변수 : List형식으로 되어있으며, 값을 넣기(push) 위한 공간이라 생각하시면 됩니다.

 - popValues 변수 : 이는 stack변수에서 빠진(pop) 값을 담아두기 위한 공간입니다. (단순히 어떤식으로 빠지나를 확인하기 위한 용도입니다.)

 - push 함수 : String 값을 받아오면 stack 변수에 입력(push) 해줍니다.

 - pop 함수 : stack 변수에서 마지막 값을 꺼냅니다.(pop) 

 - printStack 함수 : push 및 pop 등의 과정을 거쳐 현재 상태를 console창에 print 해줍니다.

 - printPopValue 함수 : pop된 데이터 값을 순서대로 보여줍니다.(popValues 활용)

 

완성 소스 (소스는 github에도 업로드하였습니다. - 링크)

/**
 * Stack 클래스
 * @author karzin
 *
 */
public class Stack {
	
	//Stack 변수 생성 (List)
	private List<String> stack = null;
	
	//Stack 변수에서 pop된 데이터를 저장
	private List<String> popValues = null;
	
	//생성자 - stack을 초기화해줌
	Stack() {
		stack = new ArrayList<String>();
		popValues = new ArrayList<String>();
	}
	
	//stack에 값을 넣음(push)
	public void push(String pushValue) {
		stack.add(pushValue);
	}
	
	//stack에서 값을 뺌(pop)
	public String pop() {
		String popValue = "Stack이 비어있습니다.";
		
		if(stack.size() > 0) {
			popValue = stack.remove(stack.size()-1);
			popValues.add(popValue);
		} else {
			System.err.println(popValue);
		}
		
		return popValue;
	}
	
	//stack 내부에 있는 값을 모두 출력한다.
	public void printStack() {
		int i = 0;
		
		for(String value : stack) {
			if(i < value.length()) {
				i = "| ".length() + value.length() + " |".length();
			}
		}
		
		for(int s = stack.size()-1; s >= 0; s--) {
			int length = "| ".length() + stack.get(s).length() + " |".length();
			length = i-length;
			System.err.print("| "+stack.get(s));
			for(int j = 0; j < length; j++) {
				System.err.print(" ");
			}
			System.err.print(" |");
			System.err.println();
			for(int j = 0; j < i; j++) {
				System.err.print("-");
			}
			System.err.println();
		}
		
		System.err.println();
	}
	
	//popValues 변수에 있는 값을 순서대로 보여줌.
	public void printPopValue() {
		System.out.print("popValues ==> ");
		System.out.println(popValues);
		
		System.out.println();
	}

}

 

테스트해보기 (Main Class 생성 및 실행 -> 소스는 github에도 업로드하였습니다. - 링크)

stack.push("A");
stack.printStack();

stack.push("B");
stack.printStack();

stack.pop();
stack.printPopValue();

stack.push("C");
stack.printStack();

stack.pop();
stack.printPopValue();

stack.pop();
stack.printPopValue();

 

결과

-> Debug 모드로 실행하셔서 한줄 한줄 어떤식으로 바뀌는지 확인해보시면 더욱 이해하기 쉽습니다.

---

졸면서 하느라고 함수도 소스도 많이 적은느낌이네요.

버그같은거 있다면 댓글남겨주시면 최대한 바로 수정하겠습니다.

감사합니다.

 

 

** 그림에 사용된 글자체는 네이버 나눔글꼴의 나눔스퀘어 Bold입니다.

 

버전정보 (v1.1)

 - v1.0 2020.06.18 배포

 - v1.1 2020.06.23 제목 말머리 [자료구조] 추가

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

 

Karzin

abbeea@naver.com




+ Recent posts