날아라쩡글이의 블로그입니다.

프로그램이란 본문

중앙 HTA (2106기) story/java story

프로그램이란

날아라쩡글이 2021. 8. 31. 19:25
반응형

java를 이용한 프로그램을 만들기 위한 목적으로 강의를 듣고 있다. 

프로그램이란 어떤의미 일까? 사용자의 요청에 따라서 그 요청에 대응되어서 특별한 작업을 수행하는 것으로 정의를 내릴 수 있다. ex) 계산프로그램, 출입국 프로그램,.... 컴퓨터가 수행할 작업을 순서대로 작성한 작업지시서라고도 말 할 수 있다. 

건축회사에서 작업을 수행 할 때 중요한것은 어떤것이 있을까? 첫번째로는 건축자재가 있어야하고, 두번째로는 순서대로 만들어지도록 작업을 지시하는 지시서가 있을 것이다. 

그렇다면 건축회사에서 작업을 수행하는 것처럼, 컴퓨터에서 사용자의 요청에 따라서 수행할 작업을 순서대로 작성한 작업지시서인 프로그램은 어떻게 될까? 

  1. 필요한 재료(Data)를 정의 한다. 사람의 이름? 아이디? 비번? 시작, 종료일에 해당하는 상품조회, 아이디와 비번의 조합 같은 필요한 재료를 정의 하는 것이다. 
  2. 작업의 순서에 대해서 정확하게 정의하기 : 로그인레시피, 로그아웃 레시피, 체크아웃, 인 레시피, 수강신청레시피, 수강취소 레시피등 하나하나를 method라고 정의한다. main으로 진입하지만, 별도로 메소드들을 만들 수 있다.

앞에서 레시피라고 적은 것처럼, 이런 순서를 가지고 있는 것을 생각해보면 , 요리 레시피와 동일하다고 할 수 있다. 

요리레시피 또한 1. 요리에 필요한 재료를 정의한다, 2. 요리의 순서를 정의하고 어디서 실행하던 똑같은 요리 결과가 나온점을 생각하면, 어떤컴퓨터에서 실행해도 동일하게 나온다는 점을 생각하면 프로그램 또한 동일하다. 

김치전 레시피라고 생각을 한다면, 

김치 채소 플라스틱 김치통
부침 가루 분말 비닐봉지
김치 국물 액체 그릇
식용류 액체 플라스틱
참치 생선 금속캔
값(데이터) 자료 형태(데이터타입) 그릇(변수:값을 저장하는 곳, 김치와 식용류를 사용하면 용량이 변하는 것을 의미한다, 재료에 타입에 따라서 그릇을 어떤걸 사용할지 달라진다. )

이렇게 생각할 수 있다. 값은 어떤 것인지 자료 형태가 정해져있고, 그리고 그 자료형태를 담는그릇이 정해져있다는 것이다. 

이렇게 재료를 준비한 다음, 요리순서를 정의한다. 

  1. 반죽할 그릇에 김치를 담는다. (실행문)
  2. 부침가루를 1컵 넣는다. (실행문)
  3. 김치국물을 1국자 넣는다. (실행문)
  4. 통조림을 1개를 넣는다. (실행문)
  5. 모든재료를 섞는다 (여기까지는 1번만 반복해도 된다. ). (실행문)
  6. 팬을 달구고 식용류를 두른다. (실행문)
  7. 반죽을 올려서 얇게 펴바른다.  (실행문)
  8. 앞,뒤로 노릇노릇하게 부친다.  (실행문)
  9. 재료가 소진될 때까지 6,7,8을 반복한다. (반복문)
  10. 완성. (실행문)

그런것처럼 호텔 검색하는 프로그램을 생성한다고 할 경우 이런식으로 표현이 될 수 있다. 

지역(어디있는지 ) 문자열(text) String  
체크인 날짜 날짜    
체크아웃 날짜 날짜    
인원 수  정수 int  
값(데이터) 값의 타입(데이터 타입) 변수타입 (저장소의 타입) 변수명(저장소의
이름)

변수의 경우 변수의 저장소는 고유한 이름을 가져야 한다. 

냉장고안의 내용물을 예를 들자면 밀가루와 미숫가루, 설탕과 소금이 있다고 하자. 그럼 이 재료들을 꺼내기 위해서는 맛을 보고 확인하고 구별하지 않는 이상은 어떤 재료인지 확인이 어려울 것이다. -->그럼 재료 통 밖에 이름표를 붙여주면 쉽게 확인하고 꺼낼 수 있을 것이다. 

즉, 라벨명을 붙이면 바로 확인해서 찾을 수 있을 것이기 때문에 변수 명 (저장소의 이름)을 정해주어야 하며, 김치를 보자기에 싸면 다흐르고, 비닐에 쌀 경우 흐를 경우가 발생, 유리통에 넣으면 터질 가능성이 있기 때문에 김치를 김치통에 보관하는 것처럼, 담으려는 값의 타입에 따라서 변수의 타입 (저장소의 타입)이 정해진다. 

변수의 타입(저장소의 타입)을 기본자료형이라고 부른다. 음식을 담는 락앤락을 생각해보면 음식의 가짓수는 많지만, 용기의 모양, 크기에 따라서 적절하게 골라서 사용을 하는 것처럼, 값의 타입에 따라서 변수의 타입도 잘 선택하여 사용해주어야 한다. 

락앤락 통

자료형의 경우 총 4가지의 자료형이 존재한다.
기본 데이터 타입이라는 명칭을 붙인다. Data Type에 따라서 잘 결정을 해야한다. 

1. 논리형 boolean 1byte  -- 값은 ture,  false의 값밖에 존재하지 않는다. 참, 거짓으로 표현된다. 

2. 정수형 byte와 short 타입의 변수를 사용하는 경우가 극히 제한적이다. 

  1. byte : 바이너리 데이터(text:메모장파일을 의미함)를 다루거나 입출력등의 작업에서만 제한적으로 사용이 된다. 국어점수, 수학점수, 등의 값이 0~100사이의 값이기 때문에 byte타입의 범위(-128~127)내에 속하지만, 절대로 byte타입의 변수를 사용해서 국어점수, 수학점수를 저장해서는 안된다. byte의 경우 위에 적힌 작업에서만 사용되기 때문이다. 
  2. short  :  정보시스템용 application에서 거의 사용되지 않는다. 
  3. int : 정수를 저장하는 변수의 타입으로 가장 적절하다. int의 경우 Java에서 기본형으로 지정이 되어있다. -2,147,483,648~2,147,483,647의 값을 가지고 있기 때문에 포인트, 사람수, 코로나 확진자 수등을 범위내에 출력할 수 있고, 만수르의 재산은 만경이기 때문에 long을 입력하여 작성해주는 것이 좋다.
  4. Long : 금액에 대해서 지정할 경우는 long을 작성해주는 편이 좋다. 그러나 Java에서는 int값을 정수의 기본 타입으로 지정이 되어있기 때문에, long타입에 담을 것이라는 것을 선언해주어야 한다. int의 범위를 초과하는 정수를 표현할 때에는 숫자 뒤에 L이나 l을 작성해주는 것이 좋다. 그러나 소문자 l의 경우 1과 헷깔릴 수 있기 때문에 대문자를 적어주는 편이 좋다. 

3. 실수형

  1. float : 정보시스템용 application에서 거의 사용되지 않는다. Java에서는 double이 기본형으로 되어있고, float의 크기는 4byte, double의 크기가 8byte이기 때문에 double형의 실수값을 float형의 변수에 저장할 수 없다. float형의 실수값으로 판단하도록 숫자뒤에 F나 f를 붙인다. 
  2. double : float의 2배라는 의미를 가지고 있다. 

4. 문자형

  • char  : 한글자를 저장하는 변수의 자료형이다. 정보시스템용 application에서 한 글자로 된 값은 거의 존재하지 않기 때문에, char은 거의 사용되지 않는다. 2byte로 유니코드를 사용한다. '\u0000' 0~65,535 의 값으로 문자를 표현할 수 있다. 문자의 수는 이 숫자를 다합쳐도 안된다. 

변수란

  • 값을 담는 저장소다. 
  • 고유한 타입을 가진다. 
  • 자신의 타입과 일치하는 타입의 값만 저장할 수 있다. 
  • 타입이 한 번 정해지면 변경할 수 없다. 
  • 변수에 저장된 값은 프로그램이 실행되는 동안만 사용할 수 있다
  • 변수는 고유한 이름을 가지며, 이를 식별자라고 부른다. 즉, 동일한 이름의 변수는 2개를 가질 수 없다. 
  • 변수의 이름은 영어대문자, 소문자, 숫자, _를 조합하여 시작하여야한다. 
  • 변수의 이름은 반드시 문자로 시작해야 한다. 숫자로 시작할 수 없다. 
  • 변수의 이름은 대소문자로 구분한다. 

변수의 초기화란 값을 대입한다는 뜻이다. 

int score  = 100;

int age = 19;

int totalOrderprise = 12300;

변수의 저장소를 만들고, memory 어디에 저장했는지 모르지만, 저장소의 이름을 알고 있기 때문에 JVM(자바 가상 머신)이 가져오게 만들 수 있다. 저장소의 이름이 중요하다. 이름으로 찾기 때문에 변수의 이름은 저장소를 잘 들어내는 이름이 중요하다. 변수의 이름만 봐도 어떤 것이 있는지 유추가 가능해야한다. 

Eclipse를 키고 경로가 나와있지 않다면 file->switchworkspace->other에서 디렉토리 경로를 검색한다. 

변수를 초기화하는 이유 

빨간색이 오래된 Data , 파란색이 new Data , 보라색이 겹치는 부분이다. 

이렇게 보는 것처럼 오래된 Data위에 new Data가 생길 수 있는 , 저장소가 겹쳐져서 만들어질 수 있기 때문에 이전 저장소의 값이 들어가 있을수 있다. 불완전한 값으로 적정한 값을 대입 후 사용이 가능하다. 초기화 시키지않고 출력시 빨간줄이 가며 error가 뜬다. 

정수 타입의 유의사항 

  • 정수형 타입을 결정할 때, 사용하려는 데이터의 최소/ 최대 표현 범위를 고려해야한다. 
  • 해당 타입이 표현할 수 있는 표현범위를 벗어난 데이터를 저장하면 오버플로우 또는 언더플로우가 발생해 엉뚱한 값이 저장된다. 
  • 오버플로우(overflow) :최대표현범위보다 큰 수 
  • 언더플로우(underflow) : 최소표현범위보다 작은 수 
  • long의 범위를 초과하는 무한한 크기의 정수는 Biglnteger을 사용하면, 저장/연산을 수행할 수 있다. 

실수형 타입의 유의사항 

  • 실수형 변수에 저장된 값으로 사칙연산을 수행하면 작은 오차가 발생한다. 
  • 실수형의 경우 부동소수점을 이용하여 실수를 구하기 때문에 실수의 값을 정확하게 표현하지 못하고, 근접한 값으로 저장을한다. 그렇기 때문에 돈의 계산의 경우는 정확한 계산이 필요하기 때문에 실수의 값으로 표현해서는 안된다. 실수를 사용할 경우 
  • double x = 0.1; double y =0.2;  --> (x*10)+(y*10)/10으로 계산을 해주어야한다. 소수점을 없애주는 거듭제곱을 곱하고, 나중에 다시 그 숫자로 나눠주면 정확한 값이 나올 수 있다.  
  • double의 범위를 초과하는 무한한 크기의 실수는 BigDecimal을 사용하면 저장/연산할 수 있다. 

java의 경우 기본 자료형 타입과 참조 자료형 타입이 존재한다. 

기본 자료형 타입의 경우에는 변수 (저장소)에 실제 값을 저장되어 있어, 저장소가 직접적으로 값을 가지고 있다.  8개의 기본타입 외에는 나머지는 참조자료형이라고 불린다. 

참조자료형의 경우는 메모리가 어디 위치에 있는지에 대한 주소값만 변수형에 가지고 있어서, 참조 변수의 경우 실제 값이 아닌 주소 값만 갖고 있는 것이다. 

  • 변수(저장소)에 참조자료의 주소값이 저장되어 있는것이다. 
  • 주소값은 실제값을 가지고 있는 객체의 위치를 나타내는 값이다. 
  • 리모컨으로 밖에 에어컨을 조작하지 못한다고 하면, 리모컨은 에어컨이라고 해도 무방하다. 그래서 참조 변수라고 부른다. 

Why? 문자열은 참조변수이고, 기본 자료형과 무엇이 다를까? 기본 자료형의 경우 정수, 실수, 논리 형으로 구성이 되어있어서 사칙연산, 비교, 대입 연산 외에는 사용하지 않는다. 문자열의 경우 소문자를 대문자로 , 대문자를 소문자로, 추출하거나, 문자내용을 교체하는 방법으로 훨씬더 많은 일을 하고 있다. "홍길동"이라는 문자열주위로 기능을 설정해놓았는데 많은 기능을 가지고 있기 때문에 값만 담는 변수 영역에 설정할 수가 없어서 주소값을 설정한 것이다. ->문자열은 많은 기능을 수행하고 있다. 매번 부여하기에는 어렵고, 기능을 부여해놓은 통에 넣어버리는 것이다. 그 통의 명칭이 String이다. ctrl+마우스 올려 놓고  클릭하면 3000줄 이상의 코딩을 해놓은 사실을 확인 할 수 있다. 

불린의 경우 결과값만 보고, 문자의 true인지 문자열의 true인지 , boolean의 true인지 구분이 어렵다. 

변수에 더블클릭하면 변수 명 전체가 클릭된다. 

재료를 만드는 것처럼 내가 만드는 type이 무엇인지, 어떤 변수명을 사용할 것인지에 대해서 계획하는 것은 중요하다. 

자바는 연산을 하는데 정수/정수를 진행하게 될 경우에는 정수가 나오며, 연산에 참여한 데이터 타입과 동일한 결과가 나오는 것을 확인할 수 있다. 

  • 3/10 (정수/정수) =>0=>정수 
  • 3.0/10.0 => 0.3 =>실수 
  • 정수/실수 => 실수가 나오게 된다. 이를 자동형변환이라고 한다. 

형변환이란, 

  • 값을 다른 타입의 값으로 변환하는 것이다. 
  • 숫자와 문자 타입만 데이터 형변환이 가능하다.
  • 형변환의 종류는 
  • 자동형변환 : 크기가 작은 타입의 값을 큰 타입의 값으로 변환하며, 정밀도가 낮은 타입의 값을 큰 타입의 값으로 변환하는 것을 자동으로 처리하는데 이를 자동형변환이라고 한다 . (작 ->큰, 낮->큰)
  • 수동형변환 : 크기가 큰 타입의 값을 크기가 작은 타입으로 변환하며, 정밀도가 높은 타입의 값을 낮은 타입으로 변환하는 것을 개발자가 직접적으로 데이터 손실이 일어나도 전환을 하겠다고 선언하는 것을 의미한다 (큰->작, 큰->낮)-->데이터 손실이 일어날 수 있는 것은 자동으로 안해줌

자바의 연산에서는 자동형변환으로 데이터 타입을 같게 만든후 일어난다 . 즉 double value1 = 100; 이라는 값을 줄 경우 100의 경우는 int의 값을 지닌 것을 알 수 있다. 자동형변환의 경우 낮은 곳에서 큰곳으로 이뤄지기 때문에 int(4byte)의 값은 8byte의 값인 double로 전환이 가능하다. double value1 = 100.0;으로 연산자가 변경이 된 후에 값을 대입하게 된다. 

기본적으로 좌항과 우항의 값이 같아야 대입이 가능하다는 사실을 인지하고 있어야한다. 

형변환의 경우 문자와 정수만 가능하다. 

 

자바의 연산자 

산술연산자 

  • 산술연산자의 경우 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 계산을 수행하는 연산자 이다. 
  • 나머지 연산자의 경우 (모듈러 연산자라고 한다:Modulo Operation :Mod =나머지) 5%3으로 나눌 경우 나머지의 값은 언제나 0,1,2  밖에 안나온다. 5/3의 경우 1이 나옴 , 일반적인 정보시스템,  정보검색, 요청한 시스템에서는 사용하지 않고 암호화나 포크화와 관련된 작업에서 많이 사용이 된다. 
  • 1. Event 값, 1000,2000,3000번째.. 등의 이벤트에 사용을 한다. ((n값%1000)==0)으로 설정할 경우 1000,2000,3000..등의 Event에 알람이 울리게 만들 수 있다. 
  • 2. 453의 숫자의 100의 자리, 10의 자리 , 1의 자리를 추출해 낼 수 있다.

대입연산자 : 오른쪽의 값을 왼쪽에 대입하는 값 , 문법적 설탕이라고 불리운다. 

  • 문법적설탕(Syntactic Sugar) 사람이 이해하기 쉽고 표현하기 쉽게 컴퓨터 언어를 디자인해 놓은 문맥 --->이항 연산자 

증감연산자 : 많이 사용한다. 단항연산자 

  • 항이 하나밖에 없는 연산자로, 단항 연산자이다. 
  • ++x,x++ 앞뒤 상관없이 증가가된다. 그러나 증가 되는 시점은 다르다. 

관례 :  + , - 의 경우 띄어서 작성해야하며, * , / , %의 경우는 붙여서 작성해야한다.

(pageNo - 1)*10 + 1 ---->우선순위에 맞춰야 하기 때문에 붙여서 작성해야한다.

 

디버그 

틀린것 같은 곳 위에 마우스를 올려서 더블클릭한다. BreakPoint를 준다. 그리고 Debug를 클릭 > 변수 쫒아가기 (Step Over)을 클릭하여 다음으로 넘어가면서 변수의 틀린부분이 어디인지 확인한다. 어느부분이 문제가 있는지 확인할 수 있다. 사용자의 결함은 BigBang으로 하는 것이 아닌 Step By Step으로 진행해주어야한다. 

 

 

반응형
Comments