반응형

Swift 의 기본 데이터 타입에 대해 이전 포스팅과 이어서  Any, AnyObject 대해서도 공부해보자.




2018/10/21 - [IT 정보 로그캣/Swift] - [Swift 공부]기본 데이터 타입 (자료형) #1




Swift 의 데이터 타입에 대해 공부할 때 참고로 공부해야하는 부분이 있는데 바로 nil 과 Type Aliases 이다.

그래서 이번 포스팅에서 nil과 Type Aliases 부분도 함께 살펴 보았다.



Any 타입


 Any 는 말 그대로 Swift 의 아무(모든) 데이터 타입을 사용할 수 있다는 의미이다. 

타입을 명시하지 않고 그냥 바로 선언해서 사용하는 타입 추론처럼 어떻게 보면 가장 편리할 것 같지만 Any 로 선언된 변수의 값을 가져다 쓰려면 매번 타입 확인과 형 변환을 해야하는 번거로움이 있다. 

그래서  특별한 경우가 아니면 사용하진 않을 것 같다.

 예를들어 < 그림 1 > 과 같이 Any 로 선언한 타입의 값을 아무 조치없이 사용하면 컴파일 에러가 발생한다.

컴파일 에러 내용은 Any 타입에 숫자 100을 넣고 if 문의 조건에 넣었는데 Any 타입과 숫자 100 (Int) 를 비교할 수 없다는 것이다. 

( * Any는 타입을 명시하지 않고 바로 사용하는 Swift 의 타입 추론 과는 다르다.)



그림 1 > Any 타입 사용 예제




AnyObject


 AnyObject 는 모든 클래스의 타입을 지칭할 수 있는 타입으로 클래스의 인스턴스를 지정해 줄 수 있다.  

마찬가지로 AnyObject 도 Any 처럼 사용하는데 있어서 번거로움이 존재하기 때문에 특별한 경우가 아니면 잘 사용하지 

않는게 좋겠다.





nil


  nil 은 변수 또는 상수 에 값이 없음을 의미한다. 자바로 치자면 null 이라고 볼 수 있겠다 :)

값이 없기 때문에 nil 인 변수나 상수를 호출하여 사용하려고 하면 우리가 흔히 겪는 널 포인트 익셉션이 발생한다. 





Type Aliases

 

 Type Aliases 는 우리가 변수에 이름을 지정해서 사용 하듯이 이미 존재하는 데이터 타입에 대해 따로 이름을 지정하여 사용할 수 있는 기능이다. Type Aliases 기능은 Swift 에서 제공하는 데이터 타입 뿐만 아니라 내가 임의로 만든 데이터 타입 등에도 사용할 수 있다.




그림 2 > typealias 를 통해 Int 명칭을 커스텀하여 사용하는 방법
















* 해당 포스팅은 스위프트(Swift)4  버전을 기준으로 하고 있습니다.

* 참고 : https://swift.org/ 


반응형
반응형


 변수와 상수는 데이터 타입공부와 직결되기 때문에 포스팅은 따로하지만 같이 봐야하는 내용이다.




2018/10/21 - [IT 정보 로그캣/Swift] - [Swift 공부] 변수와 상수




 대부분의 프로그래밍 언어를 처음에 공부할 때 변수와 상수 그리고 해당 프로그래밍 언어에서 지원하는 데이터 타입을 

함께 공부한다. 데이터 타입은 자료형 이라고도 부르며 말 그대로 자신이 표현하려고 하는 데이터의 타입이 무엇인지를 

나타내는 것이다. 




데이터 타입(자료형) 이란?


 데이터 타입(자료형) 이란 변수나 상수에 담을 수 있는 값의 종류라고 보면된다. 변수와 상수의 정의를 메모리 상에 값을 저장할 수 있는 공간이라고 했는데, 이 공간에 들어갈 수 있는 값에는 각각 종류가 존재하다. 

예를들어 여자 화장실에는 여자만 들어가고 남자 화장실에는 남자만 들어가듯 변수와 상수 공간에 들어 가는 값들도 

남,녀 성별 처럼 구분이 있는 것이다.




Swift의 데이터 타입의 종류


 Swift 에서 기본으로 제공하는 데이터 타입으로는 Int , UInt, Float, Double, Bool, Character, String 등과 

Any, AnyObject 등이 있다. Swift 에서 모든 데이터 타입의 이름은  첫 글자를 대문자로 입력한다. 

Swift 의 데이터 타입들은 모두 Struct (구조체)를 기반으로 구현되어 있다. 

쉽게 설명하자면 우리가 숫자를 표현하고 싶을 때 Int 라고 입력해서 바로 사용할 수 있도록 

Swift에 미리 구조체 라는 것으로 만들어져 있다는 의미이다. 

(애플 공식 개발문서인 https://developer.apple.com/documentation/swift/int 에 들어가면 확인할 수 있다.)


사용법은 [var 변수명 : 데이터타입 ] 에서 데이터타입 부분에 자신이 원하는 데이터 타입을 넣어주면 된다.




Integer 타입


 Swift 에서 Integer(정수) 는 Int 와 UInt 로 나누어 진다. Int는 양수 (+) , 음수(-), 0 을 표현하는 정수이다.

UInt 는 Unsigned Integer 의 약자로 말 그대로 부호가 없는 양의 정수(+)와 0 을 표현하는 정수이다.

사용법은 아래 <그림1> 과 같고, UInt 에다가 음의 정수 값을 넣으면 컴파일에러가 발생한다.



그림1 > Swift 의 Integer 타입 사용법




 Swift는 특이하게 사용하는 플랫폼이 지원하는 비트에 따라 Int 와 UInt 의 타입이 달라 지는데 지원하는 비트는

각각 8비트, 16비트, 32비트, 64비트로 사용법 또한 Int8, Int16, Int32, Int64 , UInt8, UInt16, UInt32, UInt64로

나뉘어 진다. 비트에 따라 무슨 차이점이 있냐고 하면 각 비트 별로 표현 가능한 정수 자릿수의 크기가 다르다. 

Int와 UInt의 경우 구조체 안에 ~.min 과 ~.max 가 구현되어 있어서 최소, 최대 표현 가능한 정수 범위를 알 수 있다.




그림2> 비트에 따른 Int 정수 표현 범위




그림3> 비트에 따른 UInt 정수 표현 범위



특별한 경우가 아니고, 그냥 잘 모르겠다면 Int 로 선언해서 사용하면 된다. :)


 


Floating-Point Numbers (부동 소수점 숫자) 타입


 Swift에서는 부동소수점을 사용하는 실수를 표현하기 위해 Float 과 Double 타입을 사용한다. 

쉽게 설명하면 우리가 흔히 말하는 소수점 자리를 표현하기 위한 타입이라고 생각하면 된다. 

Float 과 Double의 차이점은 Float은 32비트 부동 소수점 숫자를 나타내고, Double은 64비트 부동 소수점 숫자를 

나타내는데 Integer 에서 처럼 결국은 숫자를 표현하는 범위가 다르다고 볼 수 있다. 

즉, Float 은 소수점 이하 6자리 까지 표현이 가능하고 double은 소수점 이하 15차이 까지 표현이 가능한 정밀도를 가지고 있다는 것이다. 

  



그림 4 > 원주율(Pi) 값을 넣어보면 설명대로 Float 은 소수점 6자리 까지 Double 은  소수점 15자리 까지 표현이 가능하다.




Bool 타입

 

 Bool 타입은 불리언(Boolean) 으로 불리며 참(true) or 거짓(false) 만을 값으로 가지는 타입이다. 

그래서 논리 자료형 이라고도 불린다. 주로 참(true) 값은 1, 거짓(false) 값은 0 이라고 대응시키는 프로그래밍 언어가 

많은데 Swift 에서는 true , false 대신에 숫자값 1, 0 을 넣어서 사용할 수 없다.



그림 5 > Bool 타입 사용법 (조건문의 조건에 다른 프로그래밍 언어처럼 1 의 값을 넣어서 사용할 수 없다.)


  


Character 타입 


 Character 타입은 하나의 문자를 표현하는 타입이다. Swift 에서는 유니코드 9 문자를 사용하기 때문에 유니코드에서 지원하는 모든 언어와 특수기호까지 사용이 가능하다. 보통은 하나의 문자 보다는 문자열을 사용하는 경우가 많기 때문에 

Character 는 참고정도만 하면 되겠다.



그림 6 > Character 타입 사용법 (이모티콘까지 사용이 가능하다!)




String 타입 

 

 String 타입은 문자열을 표현할 때 사용하는 타입이다. String 은 ( " ) 로 묶인 Character 의 모음 이라고 할 수 있다. 

String 에는  다양한 기능들이 존재한다. ( + ) 연산자를 통해 문자열을 이어 붙일 수도 있고, 다양한 메소드들을 사용할 수도 있다. 필요한 기능들은 그때그때 찾아서 사용하면 되고, String 을 사용하면서 제일 중요한 부분인 문자열 비교는 Swift 에서는 ( == ) 을 통해 이루어진다는 것만 기억하면 되겠다.



그림 7 > ( + ) 연산자를 사용한 String 이어 붙이기와 문자열 비교 





특수문자


  Swift 에서 문자열 내에 사용할 수 있는 특수문자들은 모두 역슬래시와 문자를 조합하여 사용한다.


1. 문자열이 끝났을 때 사용하는 null 문자 :  \0

2. 역슬래시 : \\

3. 가로 탭 : \t

4. 줄바꿈 : \n

5. 큰 따옴표  : \"

6. 작은 따옴표 \' 












* 해당 포스팅은 스위프트(Swift)4  버전을 기준으로 하고 있습니다.

* 참고 : https://swift.org/ 



반응형
반응형

 스위프트(Swift) 공부를 시작하며 대부분의 프로그래밍 언어 공부를 처음 시작할 때 가장 먼저 확인하는 변수와 상수에 

대해서 공부해 보았다. 

Swift 공식 Reference 인  https://swift.org/ 에서도 가장 먼저 상수와 변수에 대해서 알려준다. 

단순히 변수와 상수의 사용법 정도만 익혀도 되지만 항상 내가 어떤걸 공부 하는지는 알아야한다고 생각하기 때문에 초심으로 돌아가 

변수와 상수가 무엇인지 부터 차근히 공부해 보았다.



변수(Variable)와 상수(Constants) 란?


 변수와 상수는 기본적으로 컴퓨터 메모리상에 값을 저장하는 공간이다.

우리가 어떠한 값을 메모리상에 저장하게 되면 컴퓨터는 해당 공간에 주소값을 부여하고, 우리는 우리 마음대로 변수나 

상수에 이름 붙여 사용하는것이다. 

다만 차이가 있다면 변수는 언제든지 변할 수 있는 값이고, 상수는 변하지 않는 고정값이라 할 수 있다.

그럼 그냥 변수로 다 사용하면되지 굳이 상수를 왜 사용하느냐하면, 다양한 이유가 있겠지만 주요한 이유는 가독성과 

편리성이라 할 수 있다.

상수로 선언한 값은 주석을 달거나 누가 설명해주지 않아도 코드 중간에서 값이 변하지 않는다 라는걸 알게 해준다.

따라서 상수로 지정된 값을 신경쓸 필요가 없다. 보통 최대값, 최소값 등을 사용할 때 상수를 선언하여 사용한다. 

상수를 사용하는건 결국 프로그래머의 선택이라고 할 수 있겠다.


 그렇다면 근본적으로 변수와 상수는 왜 필요한걸까?


답은 간단하다. 매번 필요한 위치에 값을 입력해서 사용할 수도 있지만 변수나 상수를 선언하여 사용하면 효율성이 좋고

편리하기 때문이다.

(대부분의 기능들도 마찬가지로 이러한 이유로 생겨난것 같다)


 예를들어 10 이라는 숫자 값을 변수로 선언 해놓고 코드에 10000번 정도 사용했다고 가정할 때, 나중에 10의 값이 아닌 11을 넣어야할 때 변수가 없으면 일일이 만 번 이나 숫자 10을 지우고 11로 바꾸는 번거로운 노가다를 해야하는 것이다.. 




Swift 의 변수 사용법 


 Swift 에서는 변수를 생성하기 위해 var 이라는 키워드를 사용한다. 

기본적으로 그림과 같이 [ var 변수명  =  ] 형태나 [ var 변수명 : 데이터타입 = ] 형태로 사용 한다. 

Swift 에서는 데이터 타입을 명시해 주지 않아도 타입 추론이라해서 컴파일러가 자동으로 데이터타입을 지정해 주는 기능이 있다.

데이터 타입을 적지 않는게 편리하긴 하겠지만  개인적으로 적는게 더 좋은 습관 같다.

(데이터 타입에 대한 포스팅은 따로 작성할 예정으로 이번 포스팅에서만 데이터 타입을 빼고 작성해 보았다.)


 변수를 한번에 여러개를 선언해서 사용할 때에는 그림2 와 같이 var 는 한번만 입력하고 "," 으로 구분하여 선언 해주면 된다.




그림1 > 변수를 하나씩 선언해서 사용하는 경우 





그림2 > 변수를 한번에 여러개를 선언해서 사용하는 경우 







Swift 의 상수 사용법


 Swift 에서 상수를 선언하기 위해서는 let 이라는 키워드를 사용한다.

let 이라는 키워드를 사용한다는 점과 값을 한번 지정해주면 변경할 수 없다는 점을 제외하고는 변수와 사용법이 똑같다.

마찬가지로 데이터 타입을 따로 명시하지 않아도 자동으로 지정되고,

그림과 같이 [ let 변수명  =  ] 형태나 [ let 변수명 : 데이터타입 = ] 형태로 사용하면 된다.

다만 상수를 선언만 해놓고 나중에 값을 지정해주려고 하면 반드시 데이터 타입을 명시해야 한다.





그림3> 상수를 하나씩 선언해서 사용하는 경우 






그림4 > 상수를 한번에 여러개를 선언해서 사용하는 경우 







* 해당 포스팅은 스위프트(Swift)4  버전을 기준으로 하고 있습니다.

* 참고 : https://swift.org/ 


반응형
반응형

서버를 오랫동안 방치해뒀더니 /boot 의 용량 사용률이 100%가 되어 apt-get upgrade 는 물론 apt-get -f install 도 안되는

상황이 발생했다.

오류 메세지에 따르면 디스크가 가득찼습니다  라고 나온다. 

그동안 사용을 안했는데 디스크가 가득찼다고 나와서 당황스러웠지만 명령어 df 를 해본 결과 /boot 디렉토리 Use% 가

100% 였다... 


원인 :  기존 버전의 업데이트 커널 패키지들이 쌓여있었다!



해결방법 : 현재 업데이트 버전을 확인하고 이전 버전 패키지들은 모두 삭제해준다.


1.  ~# uname -r 



     


명령어를 입력하면 그림과 같이 현재 설치된 커널 버전이 나온다.




2.  ~# dpkg -l "*4.4.0-*" | grep ^ii



명령어를 입력하면 존재하는 패키지 목록들이 나온다.

보통 현재 커널버전대 (4.4.0-* ) 로 검색하면 된다. 

그림에서는 이미 지운 상태이지만 4.4.0-92~ 부터 98 까지 쌓여 있었다.

자신의 커널버전이 4.4.0-101 이면 4.4.0-[version] 에서  [version]이 101보다 작은 것들을 모두 지우면 된다.





3. ~# dpkg -r linux-image-extra-4.4.0-[version]-generic linux-image-4.4.0-[version]-generic linux-headers-4.4.0-[version]-generic linux-headers-4.4.0-[version]



만약 4.4.0-98 버전대 패키지를 삭제하고 싶으면 dpkg -l "*4.4.0-98" | grep ^ii 하면 리스트가 4개가 나온다.

4개 다 삭제해주면 되는데 매번 입력하기 귀찮음으로 파일명은 띄워쓰기 한번해서 쭉 연결해주면 된다.

위에 명령어를 복사해서 [version] 에 버전 숫자만 넣어주면 한꺼번에 삭제된다.




4. ~# df



삭제 후 df 로 용량을 확인 해보면 /boot 의 Use%가 100% 에서 29% 까지 줄어든걸 알 수 있다.


반응형
반응형

아이폰 앱 개발을 하기위해서는 Objective-C 나 Swift 프로그래밍 언어 공부를 해야한다.

안드로이드 개발을 하기 위해서 자바(Java) 나 코틀린(Kotlin)을 공부해야하는 것과 마찬가지다 :)

그래서 Objective-C vs Swift  중 어떤 걸 선택해서 공부해야하나 고민 끝에 프로그래밍언어 트랜드와 실제 앱 개발이 가능할 정도의 공부 시간을 생각 했을 때 Swift가 우위에 있기 때문에 스위프트를 선택 하였다.

결론적으로 스위프트(Swift)를 선택 했지만 최소한 내가 공부하는 프래그래밍언어가 어떤 건지는 알고 공부를 해야한다고 생각하기 때문에 Swift 란 무엇인가 간단히 알아보았다.


스위프트(Swift) 란?


 스위프트(Swift)는 애플의 IOS와 macOS 개발을 위한 프로그래밍 언어로 2014년 6월 2일 WWDC (애플 세계 개발자 회의)에서 처음 소개 되었다. 기존에 애플 운영체제 개발을 위한 Objective-C 가 있었지만 같이 사용될 목적으로 만들어졌다. 위에서 언급한 자바와 코틀린의 관계랑 비슷하다고 볼수있다. 

 그렇다면 스위프트는 왜? 생겨났을까. 개인적인 생각으로는 스위프트 (Swift) 이름에 그 답이 있는게 아닌가 싶다.

 Swift 의 단어 뜻을 찾아보면 "신속한", "빠른", "칼새" 라고 나온다. 많은 경우에 이름에서 정체성이 드러나듯이 스위프트의 로고는 이름 그대로 칼새를 의미하는 것 같고, 스위프트의 철학 또는 목표는 "신속하고 빠르게" 를 의미하는 것 같다. 여기서의 빠름은 성능 상의 빠름을 의미할 수도 있지만 다른 한편으로 개발이나 학습의 측면에서도 빠름을 의미하는게 아닌가 싶다. 애플에서도 스위프트를 소개할 때 가장 먼저 배우기쉬운 강력한 프로그래밍 언어 라고 설명한다. 

이러한 설명을 뒷받침 하듯이 애플 홈페이지 (https://www.apple.com/kr/swift/) 에서도 교육과정에 Swift를 도입한 대학들을 자랑(?) 한다. 

아직 많은 부분들을 공부해보진 못했지만 스위프트를 사용해본 경험으로는 코드 표현이 직관적이며, 코드를 굉장히 간단하게 표현하려는 프로그래밍언어라는 느낌을 받았다. (다만 실제로 그렇게 사용하기 위해선 아직 많은 연습과 코드 표현의 습관이 필요해 보인다...  )
결국 스위프트는 애플의 차세대 그리고 현재의 개발자 생태계 확보를 위해 만들어진 언어라고 보여진다.

 성능 상으로도 Objective-C을 개발하면서 흔히 발생하는 에러를 줄일 수 있도록 보완해서 스위프트를 만들었다고 하고, 

스위프트로 만들어진 앱이 Objective-C 로 만들어진 앱 보다 성능이 더 좋다고 애플에서 직접 발표했다고 하니 애플에서도 개발 생태계의 흐름을 고려해 Objective-C 와 스위프트가 병행은 하지만 사실상 스위프트로 대체해 나가는 것 같다. 


기준에 따라 프로그래밍언어의 순위는 달라 질 수 있지만 다양한 기준의 여러가지 지표를 비교해봐도 이미 스위프트가 Objective-C 를 앞서나가고 있으며 대체해 나가고 있음을 보여준다.





지표1 ) Github 기준 프로그래밍 언어 통계 순위 (2018 / 2분기)

Github 에서 해당  프로그래밍 언어들이 얼마나 사용 되었는지 기준






지표 2) TIOBE Index for October 2018 

해당 프로그래밍 언어를 이용하는 엔지니어 및 업체 수와 구글, 야후 등의 검색 엔진을 통해 검색되는 결과물 수 기준







지표3 ) The RedMonk Programming Language Rankings : January 2018 

GitHub 와 Stack Overflow 에서 해당 프로그래밍 언어의 이용 기준

 






스위프트(Swift) 의 역사


이 글을 작성하는 기준 ( 2018. 10 ) 스위프트의 버전은 4.2 이다. 이는 스위프트 버전이 1,2,3 ~ 4.1 이 있었다는 의미이다.

2014년 스위프트가 처음 공개되고 2015년 스위프트2, 2016년 스위프트3, 2017년 스위프트 4 가 차례대로 나왔지만 2018년에는 스위프트 5가 나오지 않았다. 대신 스위프트 4.2가 공개되었다. 버전이 바뀐다는 것은 프로그래밍 언어에 큰 변화가 있음을 의미한다. 매년 버전이 새롭게 나오다가 올해만 스위프트5가 나오지 않았다는 것은 활발하게 업데이트 되던 스위프트가 스위프트4에서 아직까지 큰 변화가 필요하기 보다 기존 걸 개선하고 보완하는 정도가 필요하다는 의미에 가까운것 같다. 이제는 어느정도 안정권에 들어선게 아닌게 싶다. 


스위프트1~ 4까지 많은 변화가 있었겠지만 

어차피 이제까지의 변화 내용은 스위프트 4.2에 모두 담겨져 있으므로 스위프트4.2 의 특징을 알아보았다.




스위프트 공식 문서를 참고하다 보니 다 영어로 되어있지만 잘 이해했다고 믿는다. 

클로저 부터 시작해 오류 처리까지 아직 제대로 기능들을 사용해보지 못해 앞으로 공부 하면서이해해 나가야 할 부분들이다.

다만 인상깊은 특징으로는 메모리가 자동으로 관리된다는 점과 세미콜론을 입력할 필요가 없다는 것이다!!

GC 야 이미 자바에서도 충분히 체감한 부분이라 하더라도 세미콜론이 없다는 부분은 정말 새로웠다.

세미콜론을 사용하지 못하는 건 아닌데 한줄에 구분없이 코드를 입력하는게 아니면 따로 입력할 필요가 없다.





* 해당 포스팅은 스위프트(Swift)4  버전을 기준으로 하고 있습니다.

* 참고 : https://swift.org/ 

* Swift 공부가 필요한 사람이 있으면 함께 공부해 나가면 좋겠습니다 :)



반응형
반응형

맥북에서 안드로이드 스튜디오 설치하기


안드로이드 스튜디오는 자바 기반이기 때문에 자바를 먼저 설치해야 한다.




2018/10/01 - [IT 개발 로그캣/기타] - [Mac] 자바 설치





맥북에 안드로이드 개발 환경 구축을  하기 위해 안드로이드 스튜디오 설치를 설치해보자.


안드로이드 스튜디오는 "안드로이드 디벨로퍼" 를 검색해서 안드로이드 디벨로퍼 홈페이지에 들어가셔서 다운받을 수 있다.


역시나 검색해서 들어가기 귀찮음으로 다운로드 링크 : https://developer.android.com/studio/









1. 안드로이드 디벨로퍼 홈페이지에서 Android Studio 를 누르고 들어가서 다운로드 받으면 된다.









2. 설치 파일을 다운로드 받고나서 실행하면 아래와 같은 그림이 나온다. 

처음에 뭔가 했더니 Android Studio 아이콘을 Applications 로 드래그 해서 옮겨주면 실제 설치파일이 컴퓨터에 생성된다.











3. FInder 에서 안드로이드 스튜디오 아이콘을 찾아서 실행해주면 설치 파일을 열것인지 물어보고 열기를 누르면 실제 설치파일이 실행된다.










4. 설치가 시작되면 기존에 안드로이드 스튜디오 설정이 있는지 물어보는데 처음 설치하는 경우 Do not import settings 를 설정해주면 된다.











5. OK를 누르고 넘어가면 Welcome 화면이 나오는데 그냥 형식적 인사임으로 [Next]를 하면되고 그러면 이제 설치 타입을 묻는다.

설치타입을 Custom 으로 하면 테마, 안드로이드 스튜디오 모듈 (에뮬레이터 등), 에뮬레이터 RAM 크기 설정 등을 할 수 있는데 설치하고 나서도 언제든지 변경 가능하다.

잘모르겠거나 귀찮으면 Standard 를 선택하고 [Next] 를 누르면 프로그램들이 자동으로 설치되고 [Finish] 를 누르면 설치가 끝나고 안드로이드 스튜디오가 실행된다.








5-1.  조금 더 개발자 감성을 일찍 느끼고 싶으면 Custom 을 누르고 [Next]를 한다.

첫 설정은 안드로이드 스튜디오 UI (테마)를 고르는 화면이다. 역시나 개발자 감성이라면 Darcula를 선택해준다. (눈의 피로도 또한 감소 시켜준다)







5-2.  다음 설정으로는 인텔의 HAXM 이라는 에뮬레이터의 속도를 높여주는 하드웨어 가속 기능과 안드로이드 가상머신 (에뮬레이터) 를 설치 할 것인가 물어본다.

가끔 에뮬레이터가 필요함으로 두개다 체크 한뒤 [Next]를 눌러준다.

컴퓨터 용량이 부족하거나 테스트 폰으로만 개발해서 에뮬레이터가 필요 없으면 Android Virtual Device 설치를 해제하고 설치하면 된다.






5-3. 마지막 설정으로  인텔 HAXM 기능에 Ram 할당량을 지정하는건데 2G 정도를 추천하니 그냥 추천하는대로 쓰자










6. 설치가 완료되고 [Finish]를 했을 때 실행된 안드로이드 스튜디오 화면



반응형
반응형

맥북에 자바(JDK) 설치하기



Mac OS 에서 개발환경 구축을 위해 자바(JDK)를 설치해 보자


자바는 오라클 홈페이지에서 다운받을 수 있으며 귀찮으니 아래 링크를 통해 다운로드


자바 다운로드 링크 : https://www.oracle.com/technetwork/java/javase/downloads/index.html


아래의 그림 화살표대로 따라 가면 자바를 다운로드 받을 수 있다.

 






자바 버전 구분


그림 왼쪽에 목록을 보면 Java SE / EE / ME 가 있는데 개인용 (개발 포함)으로 사용하려면 SE를 사용하면 된다.


SE 는 Standard Edition 으로 데스크톱 및 서버 등에서 일반적으로 사용 되는 버전이다. (안드로이드 개발할 때에도 SE 를 사용하면 됨)


EE는 EnterPrise Edition  으로 주로 서버측 개발을 위한 버전으로 SE에 다가 서버측 개발에 필요한 API 등이 추가된 버전이다.


ME는 Micro Edition 으로 상대적으로 가벼운 자바가 필요한 임베디드를 위한 버전이다.


















화살표대로 Accept License Agreement (라이선스 동의) 를 선택하고  macOS 용 파일을 받으면 된다.
















설치 파일을 다운로드 받고 실행시켜서 Install Succeeded 가 나올 때 까지 진행하면 된다. 


중간에 별다른 옵션 등이 없기 때문에 그냥 진행하면 된다. 쉽다 :)












마지막으로 터미널창에서 java -version 을 입력하고 그림과 같이 버전 정보가 나오면 설치 완료!













반응형
반응형

android.view.InflateException: Binary XML file line #46: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)'


와 같은 에러가 발생하면 대부분 xml 파일에서 오타가 문제입니다.


원인 : xml 파일에서 <View> ~ </View> 를 <view> ~ <view> 소문자로 적어서 발생 (휴먼에러다...)



해결법 : 에러가 발생한 XML 파일에서 <view> 를 <View> 로 변경해줌 


반응형
반응형

우리가 보통 컴퓨터(노트북) 이나 스마트폰을 구매할 때 아마 가장 많이 듣는게 램(RAM) 사양이 아닐까 합니다.

보통 다다익램 이라고 램 용량이 높을수록 좋다는 말이 있죠!

도대체 램이란 무엇이길래 높으면 좋은지, 나에게 알맞은 램은 무엇인지 선택하기 위해서라도 

램에 대해 알아보도록 하겠습니다,




1. 램(RAM)이란?

 

 램의 사전적 의미부터 살펴보겠습니다. 

램은 Random Access memory 의 줄임말로 데이터를 읽거나 기억시킬 수 있는 메모리 입니다. 

컴퓨터의 주기억장치라고도 하죠.  일종의 저장소라고 생각하시면 될 것 같습니다.

그런데 왜 Random Access 라는 이름이 붙었을까요? 

결론부터 알려드리자면 램에 저장된 어느 데이터든 접근 시간이 동일하기 때문입니다. 

예를들어 아래 그림과 같이 램(RAM)이 마을( 데이터를 저장할 수 있는 공간)이라면 각 집은 데이터라고 볼 수 있습니다. 

그리고 각 집마다는 중복되지 않는 고유한 주소값을 가지고 있어 언제든지 집을 찾아 갈 수 있습니다. 

( 실제로 컴퓨터가 어떠한 내용을 저장하고 찾을 때는 주소 값이라는 것을 사용합니다. )

램이라는 마을은 공간이 허용하는 한 얼마든지 집을 지을 수 있고, 집을 지을 때 마다 주소 값이 생성 됩니다. 

그런데 이 마을은 특이한 점이 있습니다. 내가 주소 값을 가지고 어느 집(Random) 을 찾아가든 출발부터 도착(Access) 시간이 똑같다는 겁니다. 

그래서 이름이 Random Access 라고 지어졌습니다. 이해가 되시나요? 

우리가 흔히 생각하는 Random 이란 단어의 의미 때문에 헷갈리실 수 있습니다. 

 한글로 표현하자면 오히려 anywhere 에 더 가까울 것 같네요 :)







2. 램의 역할


 이제 램이 왜 RAM 으로 불리는지도 알았고, 데이터를 저장하는 곳이라는 것도 알고 있습니다. 

그런데 여기서 의문점이 있습니다. 

흔히 알기로 HDD 라고 불리는 하드디스크라는 저장소가 있는 걸로 아는데 왜 램이라는 저장소가 또 필요한 걸까요?

그 이유는 우리가 항상 중요시 여기는 속도에 답이 있습니다. 

CPU가 연산을 해주는 역할을 한다고 이전 포스팅에서 설명해 드렸는데요!





2018/09/04 - [IT 정보/하드웨어] - [하드웨어] CPU 란?





1초에 몇십억 번의 연산을 하는 CPU가 필요한 데이터를 찾기엔 하드디스크가 너무 느리기 때문입니다. 

그래서 하드디스크에 저장된 자주 사용하는 데이터(프로그램) 등을 램으로 옮겨 사용합니다.  

쉽게 설명 드리자면 CPU가 치킨집 사장님이라고 생각하면 램은 조리된 치킨들이 쌓여 있는 쟁반이고, 하드디스크는 

살아 있는 닭들이 있는 양계장에 가깝습니다.

치킨 주문이 들어와서 치킨을 배달 해야하는데 매번 양계장에 가서 살아 있는 닭을 도축하고 손질하여 튀김 옷을 입혀 

튀긴 다음 치킨으로 만들기엔 엄청나게 비효율적인 것이죠. 그래서 치킨집에서 미리 조리해놓은 치킨처럼 램에서 빠르게 

사용해야할 데이터들을 저장해놓고 사용합니다. 

치킨집 사장님이 치킨가게에서 치킨을 팔듯 실제로 CPU가 데이터를 찾아오는 곳은 램인 것이죠.

즉, 램은 CPU가 데이터를 빠르게 처리하는 것을 도와주는 역할을 합니다.




* 참고로 램은 휘발성 메모리로 전원이 꺼지면 데이터가 모두 사라집니다. 마치 치킨집에서 하루 장사가 모두 끝나면 치킨을 모두 

폐기(?) 처분 혹은 정리 하듯이 말이죠 :) 

반대로 하드디스크는 비휘발성 메모리로 전원이 꺼져도 데이터가 보존됩니다.

양계장에서는 하루가 지나도 닭들이 계속 살아있는 것과 동일한 것이죠.




반응형

'IT 정보 로그캣 > 하드웨어' 카테고리의 다른 글

[라즈베리 파이] 라즈베리 파이 란?  (0) 2019.01.05
[하드웨어] CPU란?  (0) 2018.09.04
반응형

 모든 컴퓨터(노트북 포함)나 스마트폰은 CPU를 탑재하고 있습니다. 

그래서 우리는 매번 컴퓨터와 스마트폰을 구매할 때 CPU의 사양에 대해 접하게 됩니다.

보통 많은 사람들이 제조사에서 탑재해준 CPU를 그냥 사용하지만 때로는 다른 차이는 없고 CPU 클럭만 0.2~0.4 차이가 

나는데 금액은 엄청나게 차이가 나 우리를 혼란스럽게 하기도 합니다. 그렇기 때문에 나의 필요성에 맞게 제품을 구입하고 

선택하기 위해서라도 CPU란 무엇인지 알고 있어야 겠네요 :)



1.CPU란?


 CPU란 Central Processing Unit 의 줄임말로 한글로 하면 중앙 처리 장치라고 합니다. 흔히 사람의 뇌에 비유하며 

컴퓨터의 다른 부품들과 신호를 주고 받으면서 시스템 전체를 제어하는 역할을 합니다. 

여기까지는 누구나 한번쯤 들어봤을 설명이죠 :) 

쉽게 설명하자면 CPU는 사용자와 소통하는 역할을 합니다. 사람들이 서로 소통 하기 위해서는 언어가 필요 하듯이 

컴퓨터도 소통하기 위해서는 언어가 필요합니다. 그리고 컴퓨터가 사용하는 언어는 영화 매트릭스에서 많이 나오는 0 과 1로 이루어진 이진수 입니다. 

컴퓨터는 기본적으로 input & output 구조로 대화합니다. 먼저 말을 걸어주어야 대답을 해주는 친구죠. 

그런데 우리는 CPU에게 이진수로 직접 말을 걸 수 없기 때문에 중간에 매개체가 필요합니다. 바로 키보드와 마우스죠.

예를들어 아래의 그림과 같이 사용자가 키보드나 마우스를 통해 대화(input)를 걸면 우리가 건넨 말은 이진수로 변환되어 CPU에 전달되고, CPU는 input에 맞는 대답(output)을 사용자가 이해할 수 있는 표현으로 다시 변환하여 모니터 등을 통해 

보여주는 것입니다.










2. CPU 성능

 

 이제 CPU가 무슨 역할을 하는지 알았으니 CPU를 고르기 위한 기본적인 CPU 성능 정보에 대해서 알아보겠습니다.

CPU를 구입하려고 성능표를 보면 아래와 같은 설명을 볼 수 있습니다. 


출처 ) 다나와 인텔 코어 i7-8세대 8700K 커피레이크 제품 


우리가 CPU의 사양을 보거나 CPU를 선택할 때 접하는 정보를 바탕으로 CPU의 성능에 대해서 알아보겠습니다.


  •  코어 : 코어(core)는 말그대로 CPU의 핵심으로 이진수 연산 역할을 합니다. 실질적인 소통처리를 하는 친구네요! 코어는 개수에 따라 크게 싱글코어와 멀티코어로 구분됩니다. 싱글코어는 CPU안에 코어가 한 개 있다는 의미고 멀티코어는  코어가 여러개라는 의미 입니다. 멀티코어는 듀얼(2개) 코어, 쿼드(4개) 코어, 핵사(6개) 코어, 옥타(8개) 코어 등 개수에 따라 나뉘어 집니다. 코어가 많다는 건 차들이 지나갈 수 있는 터널을 많이 뚫어 놓았다고 생각하시면 됩니다. (쓰레드를 설명하기 위해 차선보다는 터널이라고 비유 하겠습니다.) 터널이 한 개 일 때 보다 두 개 일 때 더 많은 차들이 지나갈 수 있듯이 코어가 더 많을 수록 컴퓨터의 처리속도가 더 빠릅니다.


  •  클럭 : 클럭(Clock) 은 CPU의 초당 명령어를 처리할 수 있는 속도를 의미합니다. 단위는 GHz (기가 헤르츠)를 사용하며      1 GHz 는 1 초당 10억 번의 명령어를 처리하는 것을 의미합니다. 비유하자면 차선에서 차들이 낼 수 있는 제한속도와 같은 개념이라고 생각하시면 됩니다. 제한 속도가 높을 수록 차들이 빨리 지나 갈 것이고, 마찬가지로 클럭이 높을수록 더 많은 일들을 처리할 수 있습니다. 위에 CPU 성능 표에서 보면 동작 속도가 클럭을 의미 합니다.

 터보부스트 속도라는 것도 있는데 이는 오버클럭 이라는 개념으로 순간적으로 CPU가 자신의 클럭속도를 끌어올리는 것을 의미합니다. 

예를들면 도로에서 제한속도를 넘기면 단속에 걸리는데 +5 정도는 봐주듯이 CPU도 필요할 때만 잠깐 속도를 

끌어 올리는 것입니다. 그리고 차들이 속도를 높일 수록 도로와의 마찰에 의해 더 뜨거운 열이 발생 하듯이 클럭이 높을 수록 CPU의 발열과 

전력소비가 높습니다.  

노트북의 경우 발열은 노트북의 수명과 전력소비는 베터리 사용시간과 직결되는 문제이기 때문에 참고하시면 좋으실 것 같습니다 








  •  쓰레드 : 쓰레드 (Thread)와 코어의 개념에 대해 혼동하시는 분이 많습니다. 쉽게 설명 하자면 쓰레드는 코어의
    멀티테스킹 능력이라고 볼 수 있습니다. 일반적으로 코어 한 개당 스레드가 두 개씩이고, 위에서 CPU 성능 그림을 보면
    핵사(6개)코어이기 때문에 6x2 해서 쓰레드가 12가 됩니다. 단순하게 보면 우리가 흔히 노래를 들으며 공부를 하듯이 (?) 코어도 동시에 두 개씩 작업을 할 수 있다는 것입니다.
    코어와 쓰레드 설명에서 혼동을 피하기 위해 위에서 코어는 터널이라고 비유를 했고, 쓰레드는 한 터널(코어) 당 차선을
    나누어 차가 2대 씩 지나갈 수 있도록 한 것이라고 생각하시면 됩니다. 이론적으로 보면  코어 개수가 늘어난 것과 똑같은 것으로 보이지만 실직적으로는 코어의 일처리 효율을 높인수준으로 코어 개수가 늘어난 만큼의 속도 향상을 보이지는 않습니다. 




  •  L3 캐시 메모리 : L3 캐시 메모리에서 L은 Level을 의마힙니다. L3가 있으니 당연히 L1, L2 도 있습니다. 캐시메모리는 CPU 내에서 빠르게 일을 처리하려고 자체적으로 필요한 내용들을 기억하는 역할을 합니다. 예를들어 CPU에게 사용자가 대화를 걸어 자신의 집 주소를 알려달라고 질문을 합니다.  그러면 CPU는 RAM이라는 주소록을 꺼내 주소를 찾은 뒤
    알려줄 수도 있습니다. 그런데 사용자의 집 주소는 자주 사용되거나 빨리 처리 해줘야 해서 매번 RAM이라는 주소록을
    꺼내서 찾은 뒤 말해주면 늦고 귀찮습니다. 그래서 CPU는 그냥 사용자의 집 주소를 외워 사용자가 물어보면 바로바로
    답을 해줍니다.  이렇듯 CPU는 RAM이라는 메모리에 접근하여 일을 처리하면 속도가 느리기 때문에 일처리 속도를
    올리기 위해 자체적으로 기억할 수 있는 캐시 메모리를 사용합니다. 캐시 메모리가 클수록 CPU가 자체적으로 많은 내용을 기억할 수 있고 속도도 더 빠르게 됩니다.  물론 가격도 같이 올라갑니다 :)
    하지만 코어나 클럭에 비해 체감 속도에 미치는 영향은 작습니다.



  • 연산체계 : CPU의 연산쳬계는 32비트와 64비트로 이루어져 있고, CPU의 연산 능력을 의미합니다. CPU가 사용하는 언어가 이진수이기 때문에 연산쳬계가 32비트면 2의 32제곱까지, 연산체계가 64비트면 2의 64제곱까지 연산할 수 있습니다. 속도는 64비트가 더 빠르며, 사람으로 생각하자면 암산을 더 잘한다든가, 표현할 수 있는 단어나 문장이 더 많아서 빨리 대답할 수 있는 정도로 생각하시면 될 것 같습니다.






반응형

'IT 정보 로그캣 > 하드웨어' 카테고리의 다른 글

[라즈베리 파이] 라즈베리 파이 란?  (0) 2019.01.05
[하드웨어] 램(RAM)이란?  (0) 2018.09.06

+ Recent posts