<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>홍강zone</title>
    <link>https://hongjunwoo.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 9 Apr 2026 01:37:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>홍강</managingEditor>
    <item>
      <title>[정보처리기사] 소프트웨어공학 UML, 클래스, 테스트, 품질, 역공학</title>
      <link>https://hongjunwoo.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;UML (Uniffied Modiling Language) : 소프트웨어 공학에서 사용되는 표준화된 모델링 언어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템 및 소프트웨어의 다양한 측면을 시각적으로 표현하고 문서화하기 위해 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 개발자, 시스템 아키텍트, 프로젝트 관리자 등 여러 이해 관계자들 간의 의사소통을 용이하게 해주는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템 설계와 분석,문서화,소프트웨어 개발 및 유지보수에 널리 사용됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- UML은 정적(static) 및 동적(dynamic)모델링을 위한 다양한 다이어그램을 제공한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 모델링 : 소프트웨어 시스템의 구조, 구성요소 및 정적인 관계를 표현하는 데 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 클래스 다이어그램(Class Diagram) : 시스템의 클래스,속성,연산 및 클래스 간의 관계를 보여준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 객체 다이어그램(Object Diagram) : 클래스 다이어그램의 인스턴스 또는 객체 간의 상호작용을 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 패키지 다이어그램(Package Diagram) : 시스템의 모듈화와 구성을 시각화하는데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 컴포넌트 다이어그램(Component Diagram) : 컴포넌트 기반 시스템의 구조를 표현하는데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 배치 다이어그램(Deployment Diagram) : 시스템의 물리적인 배치구조를 보여준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적 모델링 : 소프트웨어 시스템의 동작,상호작용 및 시간적인 흐름을 표현하는 데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0. 유스케이스 다이어그램(Usecase Diagram) : 시스템의 동적인 측면을 모델링하며 시스템의 기능 요구사항과 액터 간의 상호작용을 표현한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시퀀스 다이어그램(Sequence Diagram) : 객체간의 상호작용을 시간 순서대로 보여준다. 메시지의 흐름과 객체간의 상태변화를 표현하여 동작을 모델링한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 상태 다이어그램(State Diagram) : 객체의 동적인 동작을 나타낸다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 활동 다이어그램(Activity Diagram) : 작업의 흐름,분기,병렬처리등을 나타내어 비즈니스 프로세서나 시스템의 동작흐름을 모델링한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UML에서 클래스 간의 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 연관 관계 : 클래스간의 일반적인 관계를 나타내며, 객체간의 연결을 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 일반화 관계 : 상속관계를 나타내며, 한 클래스가 다른 클래스를 확장 또는 상속하는 것을 표현 &quot;is - a&quot;관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 집합 관계 : 한 클래스가 다른 클래스의 집합을 포함하면서 더 큰 개념인 전체를 형성. &quot;has - a&quot;관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 합성 관계 : 한 클래스가 다른 클래스의 부분을 구성하면서 강한 종속성을 가지는 관계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 의존 관계 : 일시적인 상호작용이나 메서드 호출 등을 의미하며 한 클래스의 변경이 다른 클래스에 영향을 준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 실체화 관계 : 인터페이스와 클래스간의 관계&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpStqi/btskrn3hE8S/YzGJWPoWBKwyYqhrqcJM1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpStqi/btskrn3hE8S/YzGJWPoWBKwyYqhrqcJM1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpStqi/btskrn3hE8S/YzGJWPoWBKwyYqhrqcJM1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpStqi%2Fbtskrn3hE8S%2FYzGJWPoWBKwyYqhrqcJM1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;435&quot; height=&quot;321&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 설계 원칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SOLID(솔리드)원칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 단일 책임 원칙(Single-Responsibility Principle) : 클래스를 잘 뽑아라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스를 변경해야 하는 이유는 오직 하나여야 한다(1책임 1원칙)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 개방 폐쇄의 원칙(Open-Closed Principle) : 클래스 상속관계를 잘 활용해라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기능확장(상속)은 열려있고(대신 코드는 최소한으로 건들기) 변경에는 닫혀있어야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 리스코프 교체의 원칙(Liskov Substitution Principle) : 재정의(overRiding)를 함부로 하지 마라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서브타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 인터페이스 분리의 원칙(Interface Segregation Principle)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하나의 일반적인 인터페이스보다는 구체적인 여러개의 인터페이스가 낫다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 의존 관계 역전의 원칙(Dependency Inversion Principle)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트는 구체 클래스가 아닌 추상 클래스(인터페이스)에 의존해야 한다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 정형기술검토 (FTP, Formal Technical Review)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가장 일반적인 검토방법으로 소프트웨어 기술자들에 의해 수행되는 소프트웨어 품질보증활동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 참가자의 수를 제한하고, 논쟁과 반박을 제한하여 제품의 검토에만 집중하라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 개발자끼리 검토하는 검토회의 work-through&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 동료에게 검토를 의뢰하는 peer review&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전문가에게 검토를 받는 inspection&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 블랙박스 테스트(명세기반 테스트)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램 내부의 구조나 알고리즘을 보지않고, 요구분석명세서나 설계 사양서에서 테스트 케이스를 추출하여 테스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 동등 분할 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 경계값 분석 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 원인-결과 그래프 기법(의사결정 테이블)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 화이트박스 테스트(구현 기반 테스트)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램 내부에서 사용되는 변수나 서브루틴 등의 오류를 찾기위해 프로그램 코드의 내부구조를 테스트 설계의 기반으로 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 문장 검증 기준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 분기 검증 기준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 조건 검증 기준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4) 분기/조건 검증 기준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(5) 다중 조건 검증 기준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(6) 기본 경로 테스트(복잡도) 구하는 공식 : 화살표개수 - 노드의개수 + 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 개발 단계에 따른 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단위테스트(모듈검증) - 통합테스트(인터페이스검증) - 시스템테스트(요구분석검증) - 인수테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 트라이버 : 상위 모듈의 역할을 하는 가상의 모듈,테스트할 모듈을 호출하는 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스텁 : 하위 모듈의 역할을 하는 가상의 모듈, 테스트할 모듈이 호출할 때 인자를 통해 받은 값을 가지고 수행한 수 그 결과를 테스트할 모듈에 넘겨주는 역할&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 품질 목표&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 정확성(correctness) : 사용자가 요구하는 기능을 충족시키는 정도, 요구분석명세서와 일치하는 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 신뢰성(reliability) : 기능을 정확하고 일관되게 원하는 정밀도로 수행할 수 있는 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 효율성(efficiency) : 기능을 수행하는데 최소의 시간과 기억용량을 사용해 요구되는 기능을 수행할 수 있는 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용성(usability) : 소프트웨어를 사용하는 데 있어서 혼란스러워하지 않도록 편리한 기능을 제공하는 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 무결성(integrity) : 허가받지 않은 사용자가 데이터 접근을 통해 변경을 시도했을 때 보호할 수 있는 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이식성(portability) : 다른 하드웨어 환경에서도 운용 가능하도록 쉽게 수정해 이식할 수 있는 정도&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. (순)공학 : 추상을 &amp;gt; 구체,실현하는것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 역공학 : 개발된코드를 문서화시키는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 재구조화(restructure) : 각 단계 구조를 다듬는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 재공학(재건축) : 위의 과정들을 사용해서 개선시키는 것&lt;/p&gt;</description>
      <category>전공공부/정보처리기사</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/38</guid>
      <comments>https://hongjunwoo.tistory.com/38#entry38comment</comments>
      <pubDate>Mon, 19 Jun 2023 16:28:12 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 소프트웨어공학 기출문제</title>
      <link>https://hongjunwoo.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소프트웨어공학 소개&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Software Engineering의 Engineering이 가지는 의미와 가장 관계없는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 예술성&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 경제성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 보편타당성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 적시성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 소프트웨어 위험의 대표적 특성으로 짝지어진 것 중 가장 적합한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 연쇄작용, 확실성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 불확실성, 손실&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 연쇄작용, 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 확실성, 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 소프트웨어의 위기현상과 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 유지보수의 어려움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 개발인력의 급증&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 성능 및 신뢰성의 부족&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 개발기간의 지연 및 개발비용의 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 공학적으로 잘 작성된 소프트웨어의 특성에 관한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 소프트웨어는 신뢰성이 높아야 하며 효율적이어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어는 사용자가 원하는 대로 동작해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 소프트웨어는 편리성이나 유지보수성에 점차 비중을 적게 두는 경향이 있다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 소프트웨어는 잠재적인 오류가 가능한 적어야 하며 유지보수가 용이해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 소프트웨어 위기 발생 요인과 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 개발 일정의 지연&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어 관리의 부재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 품질의 미흡&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 소프트웨어 생산성 향상&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. Software Reengineering의 필요성이 대두된 가장 주된 이유는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 구현의 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 설계의 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 요구사항 분석의 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 유지보수의 문제&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 공학적 관점에서 좋은 소프트웨어에 대한 설명으로 적합하지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 사용법, 구조의 설명, 성능, 기능이 이해하기 쉬워야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 사용자 수준에 따른 적당한 사용자 인터페이스를 제공한 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 실행 속도가 빠르고, 소요 기억 용량을 많이 차지할수록 좋다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 유지보수가 용이해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 소프트웨어 공학에 대한 설명으로 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 소프트웨어의 개발, 운용, 유지보수, 폐기처분에 대한 체계적인 접근방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 정해진 비용과 기간 내에 소프트웨어를 체계적으로 생산하고 유지ㆍ보수하는데 관련된 기술적이고 관리적인 접근방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 공학은 안정적이며 효율적으로 작동하는 소프트웨어를 생산하고, 유지ㆍ보수 활동을 체계적이고 경제적으로 수행하기 위해 계층화 기술을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 소프트웨어 공학의 궁극적 목표는 가능한 빠른 시일 내에 독창적인 소프트웨어를 개발하는 것이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 소프트웨어 개발의 생산성에 영향을 미치는 요소로 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로그래머의 능력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 팀 의사 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 제품의 복잡도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 소프트웨어 사용자의 능력&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 소프트웨어 공학에 대한 설명으로 가장 적합한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 소프트웨어의 제작부터 운영까지 생산성을 높이기 위해 기술적, 인간적인 요소에 대한 방법론을 제공한다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어의 설계, 제작, 운영에 있어서 인간적인 요소를 배제한 프로그래밍 자체에 대한 공학적 연구를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어의 공학적이고 기술적인 영향을 사회 경제적인 시각에서만 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 소프트웨어의 위기를 해결하기 위해서 현재 이미 해결된 문제들에 대해서 역사적 관점을 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 다음 중 공학적으로 잘 작성된 소프트웨어가 갖는 특성으로 가장 적합한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 원하는 요구사항 중에 중요한 사항만 반영한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 유지보수 비용이 많이 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 신뢰성이 떨어지더라도 효율성이 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 사용자가 손쉽게 사용할 수 있다.&lt;/u&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소프트웨어 개발 프로세스 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 소프트웨어 개발 모델 중 나선형 모델의 네 가지 주요활동이 순서대로 나열된 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ⓐ 계획 수립 Ⓑ 고객 평가 Ⓒ 개발 및 검증 Ⓓ 위험 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Ⓐ-Ⓑ-Ⓓ-Ⓒ 순으로 반복&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② Ⓐ-Ⓓ-Ⓒ-Ⓑ 순으로 반복&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Ⓐ-Ⓑ-Ⓒ-Ⓓ 순으로 반복&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Ⓐ-Ⓒ-Ⓑ-Ⓓ 순으로 반복&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로토타이핑 모형(Prototyping Model)에 대한 설명으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 개발단계에서 오류 수정이 불가하므로 유지보수 비용이 많이 발생한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 최종 결과물이 만들어지기 전에 의뢰자가 최종 결과물의 일부 또는 모형을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 프로토타입은 발주자나 개발자 모두에게 공동의 참조 모델을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 프로토타입은 구현단계의 구현 골격이 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 다음 설명에 해당하는 생명주기 모형으로 가장 옳은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 오래된 모형으로 많은 적용 사례가 있지만 요구사항의 변경이 어려우며, 각 단계의 결과가 확인되 어야지만 다음 단계로 넘어간다. 선형 순차적 모형으로 고전적 생명주기 모형이라고도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로토타입 모형(Prototype Model)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 코코모 모형(Cocomo Model)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 폭포수 모형(Waterfall Model)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 점진적 모형(Spiral Model)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 나선형 모형의 각 개발 단계에 대한 설명으로 가장 옳은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Planning(계획) 단계에서는 위험 요소와 타당성을 분석하여 프로젝트의 추진 여부를 결정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Development(개발) 단계에서는 선택된 기능을 수행하는 프로토 타입을 개발한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Risk Analysis(위험분석) 단계에서는 개발 목적과 기능 선택, 제약 조건 등을 결정하고 분석한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Evaluation(평가) 단계에서는 고객 평가와 검증 과정을 수행하여 개발된 결과를 평가한다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 프로토타입 모형에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 개발 단계 안에서 유지보수가 이루어지는 것으로 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 최종 결과물이 만들어지는 소프트웨어 개발 완료시점에 최초로 오류 발견이 가능하다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 발주자나 개발자 모두에게 공동의 참조모델을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 사용자나 요구사항을 충실히 반영할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 프로토타입 모형의 장점으로 가장 적절한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 비용과 시간의 절감&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 책임 한계의 명백한 구분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 요구사항의 충실 반영&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 프로젝트 관리의 용이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 소프트웨어 생명주기 모형 중 Spiral Model(나선형모델)에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 대규모 시스템에 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 개발 순서는 계획 및 정의, 위험 분석, 공학적 개발, 고객 평가 순으로 진행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어를 개발하면서 발생할 수 있는 위험을 관리하고 최소화하는 것을 목적으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 개발 과정의 앞 단계가 완료되어야만 다음 단계로 넘어갈 수 있는 선형 순차적 모형이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 소프트웨어 프로젝트 관리를 효율적으로 수행하기 위한 3P 중 소프트웨어 프로젝트를 수행하기 위한 Task Framework의 고려와 가장 연관되는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① People&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Problem&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Product&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Process&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 소프트웨어 프로젝트 관리의 주요 구성 요소인 3P에 해당하지 않는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① People&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Problem &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Process&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ Power&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 소프트웨어를 재사용함으로써 얻을 수 있는 이점으로 가장 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 새로운 개발 방법론 도입 용이 &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/s&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 생산성 증가 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 품질 향상 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 프로젝트 문서 공유&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 소프트웨어 개발 중 가장 많은 비용이 요구되는 단계는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 설계 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 유지보수&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 소프트웨어 프로젝트 관리를 효율적으로 수행하기 위한 3P 중 소프트웨어 프로젝트를 수행하기 위한 Task Framework의 고려와 가장 연관되는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① People&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Problem &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Product&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Process&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 소프트웨어 재사용에 대한 설명으로 가장 옳은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로젝트 실패의 위험을 증가시킨다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어를 재사용함으로써 유지보수 비용이 높아진다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 모든 소프트웨어를 재사용해야 한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ &lt;u&gt;소프트웨어의 개발 생산성과 품질을 높이려는 주요 방법이다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 소프트웨어 재사용과 관련하여 객체들의 모임, 대규모 재사용 단위로 정의되는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① Component&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Sheet&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Framework&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Cell&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 소프트웨어 개발의 생산성에 영향을 미치는 요소로 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로그래머의 능력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 팀 의사 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 제품의 복잡도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 소프트웨어 사용자의 능력&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 컴포넌트 재사용을 위한 컴포넌트 기반 개발 활동에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 후보 컴포넌트가 요구되는 기능을 수행하는지를 조사하기 위해 컴포넌트 검증을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 컴포넌트의 내부 처리 과정을 조사하고 코드를 수정하기 위해 블랙-박스 랩핑(Wrapping)을 적용한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 컴포넌트 라이브러리가 컴포넌트 확장 언어를 제공하면 그레이-박스 랩핑을 적용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 어플리케이션 구현을 위해 검증, 개작, 개발된 컴포넌트들을 조립하는 컴포넌트 합성을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. 소프트웨어 재사용에 대한 설명으로 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 새로운 개발 방법론의 도입이 어려워질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어 개발의 생산성이 향상된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 시스템 명세, 설계, 코드 등 문서의 공유도가 증가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 프로젝트 실패의 위험이 증가된다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;계획 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 소프트웨어 비용 추정모형(estimation models)이 아닌 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① COCOMO&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Putnam&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Function-Point&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ PERT&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. LOC기법에 의하여 예측된 총 라인수가 36,000라인, 개발에 참여할 프로그래머가 6명, 프로그래머들의 평균 생산 성이 월간 300라인일 때 개발에 소요되는 기간을 계산한 결과로 가장 옳은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 5개월 ② 10개월 ③ 15개월 &lt;u&gt;④ 20개월&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;풀이 : 36000 / (300*6)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 브룩스(Brooks) 법칙의 의미를 가장 옳게 설명한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로젝트 개발에 참여하는 남성과 여성의 비율은 동일해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 새로운 개발 인력이 진행 중인 프로젝트에 투입될 경우 작업 적응 기간과 부작용으로 인해 빠른 시간 내에 프로젝트는 완료될 수 없다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 프로젝트 수행 기간의 단축을 위해서는 많은 비용이 투입되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 프로젝트에 개발자가 많이 참여할수록 프로젝트의 완료 기간은 지연된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. LOC 기법에 의하여 예측된 총 라인수가 50000라인, 프로그래머의 월 평균 생산성이 200라인, 개발에 참여할 프 로그래머가 10 인 일 때, 개발 소요 기간은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 25개월&lt;/u&gt; ② 50개월 ③ 200개월 ④ 2000개월&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;풀이 : 50000 / (200*10)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. CPM 네트워크가 다음과 같을 때 임계경로의 소요기일은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임계경로 : 가장 소요시간이 빠른 경로&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-06-18 173245.png&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tsPuo/btskiABfm8c/AvZ2TprkzrwhdZTChx5u5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tsPuo/btskiABfm8c/AvZ2TprkzrwhdZTChx5u5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tsPuo/btskiABfm8c/AvZ2TprkzrwhdZTChx5u5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtsPuo%2FbtskiABfm8c%2FAvZ2TprkzrwhdZTChx5u5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;386&quot; height=&quot;157&quot; data-filename=&quot;스크린샷 2023-06-18 173245.png&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 10일&lt;/u&gt; ② 12일 ③ 14일 ④ 16일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;풀이 : 2일 + 2일 + 3일 + 3일 +완료 = 10일&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 프로젝트 일정 관리 시 사용하는 Gantt Chart에 대한 설명으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 막대로 표시하며, 수평 막대의 길이는 각 태스크의 기간을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 작업들 간의 상호 관련성, 결정경로를 표시한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 이정표, 기간, 작업, 프로젝트 일정을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 시간선(Time-line) 차트라고도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. COCOMO 모델에 의한 비용(cost) 산정 과정에 해당하지 않는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① KDSI (or KLOC)를 측정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② UFP(Unadhusted function point)를 계산한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 개발 노력 승수(Development effort multifliers)를 결정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 비용 산정 유형으로 단순형, 중간형, 임베디드형이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. COCOMO model 중 기관 내부에서 개발된 중소 규모의 소프트웨어로 일괄 자료 처리나 과학기술 계산용, 비즈 니스 자료 처리용으로 5만 라인 이하의 소프트웨어를 개발하는 유형은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① embeded&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② &lt;u&gt;organic&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ semi-detached&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ semi-embeded&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 소프트웨어 프로젝트 일정이 지연될 경우, 개발 사업 말기에 인력을 추가 배치하는 것은 사업 일정을 더욱 지연 시키는 결과를 초래한다는 법칙은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Boehm&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Albrecht&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Putnam&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Brooks&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 두 명의 개발자가 5개월에 걸쳐 10000 라인의 코드를 개발하였을 때, 월별(person-month)생산성 측정을 위한 계산 방식으로 가장 적합한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 10000 / 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 10000 / 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 10000 / (5&amp;times;2)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ (2&amp;times;10000) / 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 프로젝트 계획 수립 시 소프트웨어 범위(Scope) 결정의 주요 요소로 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 소프트웨어 개발 환경&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어 성능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 제약조건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 소프트웨어 신뢰도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. CPM(Critical Path Method)에 대한 설명으로 올바르지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① CPM 네트워크는 노드와 간선으로 구성된 네트워크이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② CPM 네트워크는 프로젝트 완성에 필요한 작업을 나열하고, 작업에 필요한 소요기간을 예측하는데 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ CPM 네트워크에서 작업의 선후 관계는 파악되지 않아도 무관하다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ CPM 네트워크를 효과적으로 사용하기 위해서는 필요한 시간을 정확히 예측해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 일정 계획과 가장 관계가 없는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 프로그램 - 명세서&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 작업 분해 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ CPM 네트워크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 간트 차트(Cant Chart)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. S/W 각 기능의 원시 코드 라인수의 비관치, 낙관치, 기대치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Effort Per Task기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 전문가 감정 기법 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 델파이기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ LOC기법&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 소프트웨어 비용 산정 기법 중 산정 요원과 조정자에 의해 산정하는 방법은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 기능 점수 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② LOC 기법 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ COCOMO 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 델파이 기법&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. COCOMO(Constructive Cost Model) 모형에 대한 설명으로 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 산정 결과는 프로젝트를 완성하는데 필요한 man-month로 나타난다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 보헴(Boehm)이 제안한 것으로 원시코드 라인 수에 의한 비용 산정 기법이다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 비용견적의 유연석이 높아 소프트웨어 개발비 견적에 널리 통용되고 있다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 프로젝트 개발유형에 따라 object, dynamic, function의 3가지 모드로 구분한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. S/W 프로젝트 계획 수립 시 소프트웨어 영역(software scope)결정사항에 기술되어야 할 주요사항으로 가장 거 리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 인적자원&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 기능 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 제약조건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 인터페이스&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요구사항&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 소프트웨어 시스템 명세서의 유지 보수에 대한 설명으로 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 명세서의 유지 보수란 명세서를 항상 최신의 상태로 만드는 것을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어는 계속 수정 보완되기 때문에 명세서도 따라서 보완되지 않으면 일관성을 유지하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 최신의 명세서는 필요한 경우 즉시 사용자에게 배포해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 시스템 개발자와 사용자는 동일한 명세서를 사용하기 때문에 시스템의 구조를 사용자도 잘 알고 있어야 한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 소프트웨어 품질 목표 중 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력을 의미하는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Reliability(신뢰성) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;오류 없이 작동하고 예기치 않은 동작이나 중단 없이 계속 사용될 수 있는 것을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Correctness(정확성) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 설계된 목표와 요구사항을 정확하게 충족시키는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Portability(이식성)&lt;/u&gt; : 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Efficiency(효율성) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 제한된 자원을 최대한 효과적으로 활용하는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 공학적으로 잘 작성된 소프트웨어의 특성에 관한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 소프트웨어는 신뢰성이 높아야 하며 효율적이어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어는 사용자가 원하는 대로 동작해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 소프트웨어는 편리성이나 유지보수성에 점차 비중을 적게 두는 경향이 있다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 소프트웨어는 잠재적인 오류가 가능한 적어야 하며 유지보수가 용이해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 사용자 요구사항의 분석 작업이 어려운 이유로 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 개발자와 사용자 간의 지식이나 표현의 차이가 커서 상호 이해가 쉽지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 사용자의 요구사항이 모호하고 부정확하며, 불완전하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 사용자의 요구사항은 거의 예외가 없어 열거와 구조화가 용이하다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 개발하고자 하는 시스템 자체가 복잡하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. ISO 9126에 근거한 소프트웨어 품질목표 중 명시된 조건 하에서 소프트웨어 제품의 일정한 성능과 자원 소요량 의 관계에 관한 속성, 즉 요구되는 기능을 수행하기 위해 필요한 자원의 소요 정도를 의미하는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Usability(사용성) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;사용자가 소프트웨어를 쉽게 이해하고 사용할 수 있는 정도를 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Reliability&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(신뢰성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;오류 없이 작동하고 예기치 않은 동작이나 중단 없이 계속 사용될 수 있는 것을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Functionality(기능성) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 명세된 기능과 요구사항을 충족하는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Efficiency(효율성)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 소프트웨어 품질 목표 중 주어진 시간동안 주어진 기능을 오류 없이 수행하는 정도를 나타내는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 효율성(Efficiency) :&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 제한된 자원을 최대한 효과적으로 활용하는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 사용 용이성(Usability) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;사용자가 소프트웨어를 쉽게 이해하고 사용할 수 있는 정도를 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 신뢰성(Reliability)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 이식성(Portability) : 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 소프트웨어 품질목표 중 쉽게 배우고 사용할 수 있는 정도를 나타내는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Correctness(정확성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 설계된 목표와 요구사항을 정확하게 충족시키는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Reliability&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(신뢰성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;오류 없이 작동하고 예기치 않은 동작이나 중단 없이 계속 사용될 수 있는 것을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Usability&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Integrity(무결성) : 데이터의 정확성과 무결성을 보장하는 능력을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무결성이란 데이터가 예상된 형식과 규칙에 따라 정확하게 유지되는 것을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 소프트웨어의 품질 목표 중에서 옳고 일관된 결과를 얻기 위하여 요구된 기능을 수행할 수 있는 정도를 나타내는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 유지보수성(Maintainability)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 신뢰성(Reliability)&lt;/u&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 효율성(Efficiency)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 무결성(Integrity)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 소프트웨어 품질 목표 중 요구되는 기능을 수행하기 위해 필요한 자원의 소요 정도를 의미하는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Usability(사용성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;사용자가 소프트웨어를 쉽게 이해하고 사용할 수 있는 정도를 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Reliability&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(신뢰성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;오류 없이 작동하고 예기치 않은 동작이나 중단 없이 계속 사용될 수 있는 것을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Efficiency&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Functionality(기능성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 명세된 기능과 요구사항을 충족하는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 소프트웨어 품질 목표 중 사용자의 요구 기능을 충족시키는 정도를 의미하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;①&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Reliability&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(신뢰성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;오류 없이 작동하고 예기치 않은 동작이나 중단 없이 계속 사용될 수 있는 것을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Portability(이식성) : 하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력을 의미&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ &lt;/u&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;u&gt;Correctness(정확성)&lt;/u&gt; :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 설계된 목표와 요구사항을 정확하게 충족시키는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Efficiency(효율성) :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어가 제한된 자원을 최대한 효과적으로 활용하는 능력을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 자료 사전에서 기호&amp;ldquo;{ }&amp;rdquo;의 의미는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① &quot;comment&quot;(주석 ' ** ')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② &quot;iteration of&quot;(반복)&lt;/u&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ &quot;is composed of&quot;(정의 ' = ')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ &quot;optional&quot;(생략 ' () ' )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 자료 사전에서 기호 &amp;ldquo;{ }&amp;rdquo;의 의미는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 생략&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 반복&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 데이터 흐름도(DFD)의 구성요소에 포함되지 않는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① data flow&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② data dictionary&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ process&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ data store&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. DFD(data flow diagram)에 대한 설명으로 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 자료 흐름 그래프 또는 버블(bubble)차트라고도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 구조적 분석 기법에 이용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 시간 흐름의 개념을 명확하게 표현할 수 있다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ DFD의 요소는 화살표, 원, 사각형, 직선(단선/이중선)으로 표시한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 세분화된 자료흐름도에서 최하위 단계 프로세스의 처리 절차를 설명한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① ERD&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② Mini-spec&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ DD&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ STD&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 자료 사전에서 자료의 생략을 의미하는 기호는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① { } (반복)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② ** (주석)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ = (정의)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ ()&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. 자료 흐름도(DFD)를 작성하는데 지침이 될 수 없는 항목은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 자료 흐름은 처리(Process)를 거쳐 변환 될 때마다 새로운 이름을 부여한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 어떤 처리(Process)가 출력자료를 산출하기 위해서는 반드시 입력 자료가 발생해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 자료저장소에 입력 화살표가 있으면 반드시 출력 화살표도 표시되어야 한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 상위 단계의 처리(Process)와 하위 자료흐름도의 자료 흐름은 서로 일치되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18. 자료 흐름도(DFD)에서 &amp;ldquo;Process&quot;의 표기 형태는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 원&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 화살표&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 사각형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 직선(단선, 이중선)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19. 자료 사전에서 기호 &amp;ldquo;( )&amp;rdquo;의 의미는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 생략&lt;/u&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 반복&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20. 자료사전에서 자료의 연결(&amp;ldquo;and&quot;)을 나타내는 기호는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① +&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② = &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ ( )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ { }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21. DFD(Data Flow Diagram)에 대한 설명으로 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 단말(Terminator)은 원으로 표기한다. &amp;nbsp;&amp;nbsp;&lt;/s&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 구조적 분석 기법에 이용된다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 자료 흐름과 기능을 자세히 표현하기 위해 단계적으로 세분화된다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 자료 흐름 그래프 또는 버플(Bubble)차트라고도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22. 자료흐름도(DFD)의 작성 지침이라고 볼 수 없는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 자료는 처리를 거쳐 변환될 때마다 새로운 명칭을 부여해야 한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 자료흐름도의 최하위 처리(process)는 소단위명세서를 갖는다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 배경도(context diagram)에도 명칭과 번호를 부여해야 한다. &amp;nbsp;&amp;nbsp;&lt;/s&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 어떤 처리(process)가 출력자료를 산출하기 위해서는 필요한 자료가 반드시 입력되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23. 구조적 분석에서 자료 사전(Data Dictionary)작성 시 고려할 사항으로 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 갱신하기 쉬워야 한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 이름이 중복되어야 한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/s&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 이름으로 정의를 쉽게 찾을 수 있어야 한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 정의하는 방식이 명확해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24. 자료흐름도(DFD)의 각 요소별 표기 형태의 연결이 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Process : 원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Data Flow : 화살표 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ Data Store : 삼각형&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Terminator : 사각형&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 럼바우(Rumbaugh)의 객체지향 분석에서 사용되는 분석 활동을 가장 옳게 나열한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 객체 모델링, 동적 모델링, 정적 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 객체 모델링, 동적 모델링, 기능 모델링&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 동적 모델링, 기능 모델링, 정적 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 정적 모델링, 객체 모델링, 기능 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 객체에 대한 특성을 설명한 것으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 객체마다 각각의 상태를 갖고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 식별성을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 행위에 대하여 그 특징을 나타낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 일정한 기억장소를 가지고 있지 않다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 한 모듈 내의 각 구성 요소들이 공통의 목적을 달성하기 위하여 서로 얼마나 관련이 있는지의 기능적 연관의 정도를 나타내는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① cohesion(응집도)&lt;/u&gt; : 높을수록 좋음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② coupling(결합도) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;모듈 간의 상호 의존성 정도를 나타내는 개념. &lt;/span&gt;낮을수록 좋음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ structure&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ unity&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 객체지향에서 정보 은닉과 가장 밀접한 관계가 있는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① Encapsulation(캡슐화)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Class&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Method&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Instance&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 결합도(Coupling) 단계를 약한 순서에서 강한 순서로 가장 옳게 표시한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① stamp &amp;rarr; data &amp;rarr; control &amp;rarr; common &amp;rarr; content&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② control &amp;rarr; data &amp;rarr; stamp &amp;rarr; common &amp;rarr; content&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ content &amp;rarr; stamp &amp;rarr; control &amp;rarr; common &amp;rarr; data&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ data(데이터) &amp;rarr; stamp(스탬프) &amp;rarr; control(제어) &amp;rarr; common(공통) &amp;rarr; content(내용)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 객체지향 기법에서 다음 설명에 해당하는 것으로 가장 옳은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 유지보수와 소프트웨어 확장 시 오류를 최소화할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Abstraction(추상화)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Inheritance(상속)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Information Hiding(정보은닉)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Polymorphism(다형성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 모듈의 응집도(Cohesion)에 대한 설명으로 틀린 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 모듈의 응집도란 모듈안의 요소들이 서로 관련되어 있는 정도를 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 기능적 응집도(Functional Cohesion)는 한 모듈 내부의 한 기능 요소에 의한 출력 자료가 다음 기능 원소의 입력 자료로서 제공되는 형태이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 교환적 응집도(Communication Cohesion)는 동일한 입력과 출력을 사용하는 소작업들이 모인 모듈에서 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 논리적 응집도(Logical Cohesion)는 유사한 성격을 갖거나 특정형태로 분류되는 처리요소들로 하나의 모듈이 형성되는 경우이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 설계 기법 중 하향식 설계 방법과 상향식 설계 방법에 대한 비교 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 하향식 설계에서는 통합 검사 시 인터페이스가 이미 정의 되어 있어 통합이 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 하향식 설계에서 레벨이 낮은 데이터 구조의 세부 사항은 설계 초기 단계에서 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 상향식 설계는 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사한 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 상향식 설계에서는 인터페이스가 이미 성립되어 있지 않더라도 기능 추가가 쉽다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 객체 지향 기법에서 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 메시지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 클래스&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 추상화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 다음 중 가장 약한 결합도(Coupling)는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Common(공통) Coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Control(제어) Coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ External Coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Stamp(스탬프) Coupling&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 효과적인 모듈화 설계 방법으로 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① Coupling은 강하게 Cohesion는 약하게 설계한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Complexity(복잡성)와 Redundancy(중복성)를 최대한 줄일 수 있도록 설계한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Maintenance(유지보수)가 용이하도록 설계한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Module 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 설계한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 럼바우(Rumbaugh) 분석기법에서 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연 산 식별 및 객체들 간의 관계를 규정하여 그래픽 다이어그램으로 표시하는 모델링은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① &lt;u&gt;Object&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Dynamic&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Function&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Static&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 설계품질을 평가하기 위해서는 반드시 올바른 설계에 대한 기준을 세워야 한다. 다음 중 올바른 기준이라고 할 수 없는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 설계는 모듈적이어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 설계는 자료와 프로시저에 대해 분명하고 분리된 표현을 포함해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 요소들 간의 효과적 제어를 위해 설계에서 계층적 조직이 제시되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 설계는 서브루틴이나 프로시저가 전체적이고 통합적이 될 수 있도록 유도되어야 한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 객체지향기법에서 Encapsulation(캡슐화)에 대한 설명으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 객체 간의 결합도가 높아진다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 변경 발생 시 오류의 파급효과가 적다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 재사용성이 높아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 인터페이스가 단순화된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 객체지향 기법에서 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산을 정의한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Entity&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② Method&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Instance&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Class&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 럼바우의 객체지향 분석 기법에서 상태다이어그램을 사용하여 시스템의 행위를 기술하는 모델링은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① dynamic modeling(동적모델링) : 상태다이어그램&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② object modeling(객체모델링) : 클래스와 클래스 사이의 관련&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ functional modeling(기능모델링) : 자료흐름도(DFD)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ static modeling(정적모델링)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. Rumbaugh의 모델링에서 상태도와 자료흐름도는 각각 어떤 모델링과 가장 관련이 있는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 상태도 &amp;ndash; 동적 모델링, 자료흐름도 &amp;ndash; 기능 모델링&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 상태도 &amp;ndash; 기능 모델링, 자료흐름도 &amp;ndash; 동적 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 상태도 &amp;ndash; 객체 모델링, 자료흐름도 &amp;ndash; 기능 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 상태도 &amp;ndash; 객체 모델링, 자료흐름도 &amp;ndash; 동적 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18. 객체지향의 캡슐화에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 결합도가 낮아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 재사용이 용이하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 인터페이스를 단순화 시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 변경이 발생할 때 오류의 파급효과가 크다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19. 객체 지향 설계 및 분석단계에 대한 설명으로 틀린 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 분석 단계에서는 주어진 문제 안에서 객체들을 발견하고 객체들의 상관관계를 분석한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 분석 설계 및 구현 단계들 사이에 의미적 갭(semantic gap)이 크다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 설계 단계에서는 객체들을 클래스로 정의하고 상관관계를 상속단계로 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 구현단계에서는 정의된 클래스들에 대해 특정언어를 이용하여 1:1로 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20. 객체지향 개발 과정에 대한 설명으로 가장 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 분석 단계에서는 객체의 이름과 상태, 행위들을 개념적으로 파악한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 설계 단계에서는 객체의 속성과 연산으로 정의하고 접근 방법을 구체화한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 구현 단계에서는 클래스를 절차적 프로그래밍 언어로 기술한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 테스트 단계에서는 클래스 단위 테스트와 시스템 테스트를 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21. 럼바우의 분석 기법 중 자료 흐름도(DFD)를 이용하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 기능 모델링&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 동적 모델링 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 객체 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 정적모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22. 다음 중 가장 높은 응집도(Cohesion)에 해당하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 순서적(순차적) 응집도(Sequential Cohesion)&lt;/u&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 시간적 응집도(Temporal Cohesion) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 논리적 응집도(Logical Cohesion) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 절차적 응집도(Procedural Cohesion)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우연적&amp;lt;논리적&amp;lt;시간적&amp;lt;절차적&amp;lt;교환적&amp;lt;순서적&amp;lt;기능적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23. 시스템에서 모듈 사이의 결합도(Coupling)에 대한 설명으로 옳은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 한 모듈 내에 있는 처리요소를 사이의 기능적인 연관 정도를 나타낸다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 결합도가 높으면 시스템 구현 및 유지보수가 용이하다다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 모듈간의 결합도를 약하게 하면 모듈 독립성이 향상된다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/u&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 자료(data)결합도는 내용(content)결합도 보다 결합도가 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24. 객체에게 어떤 행위를 하도록 지시하는 명령은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Class&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Instance &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Object&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Message&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;25. 객체들 간에 메시지를 주고받을 때 각 객체의 세부내용은 알 필요가 없으므로 인터페이스가 단순해지고 데이터 와 데이터를 처리하는 함수를 하나로 묶는 것을 의미하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① abstraction(추상화)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② class &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ encapsulation(캡슐화)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Inheritance(상속)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26. 다음 중 독립적인 모듈이 되기 위해서 가장 좋은 결합도 상태는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① control coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② stamp coupling &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/u&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ common coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ content coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27. 럼바우의 객체 지향 분석에서 분석 활동의 모델링과 가장 관계없는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 객체(object) 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 절차(procedure) 모델링&lt;/s&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 동적(dynamic) 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 기능(functional) 모델링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;28. 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 의한 목적으로 제어 신호를 이용하여 통신하는 경우이며, 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리전도현상이 발생하게 되는 결합도는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① Control Coupling&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Data Coupling &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Stamp Coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Common Coupling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;29. 캡슐화(Encapsulation)에 관한 설명 중 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 데이터와 데이터를 처리하는 함수를 하나로 묶는 것이다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 캡슐화된 객체의 세부 내용이 외부에 은폐되어 변경이 발생하게되 오류의 파급 효과가 적다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 인터페이스가 단순해지고 객체 간의 결합도가 낮아진다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 캡슐화된 객체들은 재사용이 불가능해진다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30. 객체지향 프로그램 개발 기법에 대한 설명으로 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 소프트웨어의 재사용률이 높아진다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 절차중심의 프로그램밍 기법이다. &amp;nbsp;&lt;/s&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 개체모델의 주요요소의 추상화, 캡슐화, 모듈화 등이다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 설계 시 자료와 자료에 가해지는 프로세서를 묶어 정의하고 관계를 규명한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 블랙박스 검사 기법에 해당하는 것으로만 짝지어진 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가. 데이터 흐름 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나. 루프 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다. 동치 분할 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라. 경계값 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마. 원인-효과 그래프 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바. 비교 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 가, 나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 가, 라, 마, 바&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 나, 라, 마, 바&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 다, 라, 마, 바&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 시스템 검사의 종류 중 통합 시스템의 맥락에서 소프트웨어의 실시간 성능을 검사하며, 모든 단계에서 수행되는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 복구 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 보안 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 성능 검사&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 강도 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 화이트박스 테스트에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 제품의 내부 요소들이 명세서에 따라 수행되고 충분히 실행되는가를 보장하기 위한 검사이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 모듈 안의 작동을 직접 관찰한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 프로그램 원시 코드의 논리적인 구조를 커버하도록 테스트 케이스를 설계한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 화이트박스 테스트 기법에는 조건 검사, 루프 검사, 비교 검사 등이 있다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Brooks의 법칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Boehm의 법칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Pareto의 법칙&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Jackson의 법칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 소프트웨어 품질보증에서 FTR의 지침 사항으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 논쟁과 반박을 제한하지 않는다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 자원과 시간 일정을 할당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 문제 영역을 명확히 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 모든 검토자들을 위해 의미 있는 훈련을 행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. White Box Testing의 설명으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① Base Path Testing, Boundary Value Analysis가 대표적인 기법이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Source Code의 모든 문장을 한번 이상 수행함으로써 진행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 모듈 안의 작동을 직접 관찰할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 산출물의 각 기능별로 적절한 프로그램의 제어구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 점검한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 상향식 통합 검사에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 깊이 우선 통합법 또는 넓이 우선 통합법에 따라 스터브(stub)를 실제 모듈로 대치한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 검사를 위해 드라이버를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 하위 모듈들을 클러스터로 결합한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 하위 모듈에서 상위 모듈 방향으로 통합하면서 검사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. Alpha test, Beta test와 관계있는 검사 방법은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Unit(단위테스트) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;독립적으로 테스트 가능한 가장 작은 구성 요소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Integration(통합테스트) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;개별적으로 테스트된 구성 요소들이 함께 작동하는 것을 확인하는 단계&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ System(시스템테스트) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;완전한 소프트웨어 시스템을 대상으로 수행되는 테스트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Validation(검증) &lt;/u&gt;: &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;개발된 소프트웨어가 사용자의 요구사항을 충족하는지 확인하는 과정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 어떤 프로그램을 재공학 기술을 적용하여 보수하고자 할 때 Flow Graph가 사용될 수 있다. 다음의 샘플 프로그 램에 대한 Flow Graph가 다음 그림과 같을 때 McCabe 식의 Cyclomatic Complexity를 구하면?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-06-18 200149.png&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CMsLq/btsklpe95BW/aNNYXr1C3f6MrdNkIZNv61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CMsLq/btsklpe95BW/aNNYXr1C3f6MrdNkIZNv61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CMsLq/btsklpe95BW/aNNYXr1C3f6MrdNkIZNv61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCMsLq%2Fbtsklpe95BW%2FaNNYXr1C3f6MrdNkIZNv61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;221&quot; height=&quot;169&quot; data-filename=&quot;스크린샷 2023-06-18 200149.png&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 1 &lt;u&gt;② 2&lt;/u&gt; ③ 3 ④ 4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀이 : V(G) = E(화살표수) - N(노드수) + 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= V(G) = 5 - 5 + 2 = 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 다음 중 검증 시험(Validation Test)과 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 알파(Alpha) 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 베타(Beta) 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 블랙박스(Black-Box) 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 화이트박스(White-Box) 테스트&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 검증(Validation) 검사 기법 중 개발자의 장소에서 사용자가 개발자 앞에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 검사하는 기법은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 디버깅 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 형상 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 베타 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 알파 검사&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 블랙박스 테스트 기법 중 여러 버전의 프로그램에 동일한 검사 자료를 제공하여 동일한 결과가 출력되는지 검 사하는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① Comparison Testing(비교테스트)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Boundary Value Analysis&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Cause Effect Graphing Testing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Equivalence Partitioning Testing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 소프트웨어 품질 보증을 위한 정형 기술 검토의 지침 사항으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 각 체크 리스트를 작성하고, 자원과 시간 일정을 할당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 검토의 과정과 결과를 재검토한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 논쟁과 반박을 제한한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 의제와 참가자의 수를 제한하지 않는다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 블랙박스 테스트 기법에 해당하는 내용을 모두 고르면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ⓐ 소프트웨어 인터페이스에서 실시되는 검사로 설계된 모든 기능들이 정상적으로 수행되는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ⓑ 소프트웨어의 기능이 의도대로 작동하고 있는 지, 입력은 적절하게 받아들였는지, 출력은 정확하게 생성 되는지를 보여주는데 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ⓒ Equivalence Partitioning Testing, Boundary Value Analysis 등이 이 기법에 해당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Ⓐ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Ⓐ, Ⓒ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Ⓑ, Ⓒ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Ⓐ, Ⓑ, Ⓒ&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 다수의 사용자를 제한되지 않은 환경에서 프로그램을 사용하게 하고 오류가 발견되면 개발자에게 통보하는 방 식의 검사(test) 방법은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① alpha test&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② beta test&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ configuration test&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ unit test&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 프로그램 설계도의 하나인 NS(Nassi-Schneiderman) Chart에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 논리의 기술에 중점을 두고 도형을 이용한 표현 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 박스, 다이아몬드, 화살표 등의 기호를 사용하므로 읽고 작성하기가 매우 쉽다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 이해하기 쉽고 코드로 변환이 용이하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 연속, 선택, 반복 등의 제어 논리 구조를 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. 하향식 통합 테스트 수행을 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈의 명칭은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① alpha&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② builder &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ cluster&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ stub&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18. NS차트(Nassi-Schneiderman chart)에 대한 설명으로 가장 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 논리의 기술에 중점을 두고 도형을 이용한 표현 방법이다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 이해하기 쉽고 코드 변환이 용이하다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 화살표나 GOTO를 사용하여 이해하기 쉽다.&lt;/s&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 연속, 선택, 반복 등의 제어 논리 구조를 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19. 화이트박스 검사로 찾기 힘든 오류는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 논리흐름도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 자료구조&lt;/s&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 루프구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 순환복잡도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20. 정형 기술 검토(FTR: Formal Technical Review)의 지침 사항으로 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 자원과 시간 일정을 할당한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 문제 영역을 명확히 표현한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 참가자의 수를 제한하지 않는다.&lt;/s&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 모든 검토자를 위해 의미 있는 훈련을 행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21. 다음의 소프트웨어 검사 기법 중 성격이 나머지 셋과 다른 하나는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 동치 분할 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 경계값 분석 &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 비교 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 기초 경로 검사&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22. 알파검사와 베타검사에 대한 설명으로 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 알파검사는 사용자가 개발자 앞에서 검사한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 베타검사는 선정된 최종 사용자가 여러 명의 사용자 앞에서 검사한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 베타검사는 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/s&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 알파검사는 통제된 환경에서 베타검사는 개발자에 의해 제어되지 않는 상태에서 검사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23. 블랙박스 테스트를 이용하여 발견할 수 있는 오류의 경우로 가장 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 비정상적인 자료를 입력해도 오류 처리를 수행하지 않는 경우 &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 정상적인 자료를 입력해도 요구된 기능이 제대로 수행되지 않는 경우 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 반복 조건을 만족하는데도 루프 내의 문장이 수행되지 않는 경우&lt;/s&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 경계값을 입력할 경우 요구된 출력 결과가 나오지 않는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24. 시스템의 구성 요소 중 출력된 결과가 예정된 목표를 만족시키지 못할 경우 목표 달성을 위해 반복 처리하는 것을 의미하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Process&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② Feedback&lt;/u&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Control&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Output&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;25. 검토회의 전에 요구사항 명세서를 미리 배포하여 사전 검토한 후 짧은 검토 회의를 통해 오류를 조기에 검출하 는데 목적을 두는 요구사항 검토 방법은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 빌드 검증&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 동료 검토&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 워크 스루&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 개발자 검토&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26. 평가 점수에 따른 성적부여는 다음 표와 같다. 이를 구현한 소프트웨어를 경계 값 분석 기법으로 테스트 하고자 할 때 다음 중 테스트 케이스의 입력 값으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가점수 성적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;80~100 A&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;60~79 B&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0~59 C&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 59&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 80&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 90&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 101&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27. 검증 검사 기법 중 개발자의 장소에서 사용자가 개발자가 앞에서 행하는 기법이며, 일반적으로 통제된 환경에서 사용자와 개발자가 함께 확인하면서 수행되는 검사는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 동치 분할 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 형상 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 알파 검사&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 베타 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;28. 하향식 통합에 있어서 모듈 간의 통합 시험을 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험 용 모듈을 무엇이라고 하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① Stub&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Driver&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Procedure&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Function&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;29. 소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 항목으로 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 정확성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 무결성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 사용성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 간결성&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30. 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Brooks의 법칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Boehm의 법칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Pareto의 법칙&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Jackson의 법칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;31. White Box Testing에 대한 설명으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① Base Path Testing, Boundary Value Analysis가 대표적인 기법이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Source Code의 모든 문장을 한 번 이상 수행함으로써 진행 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 모듈 안의 작동을 직접 관찰할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 산출물의 각 기능별로 적절한 프로그램의 제어구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 점검 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;32. 블랙박스 테스트의 유형으로 틀린 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 경계값 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 오류 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 동등 분할 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 조건, 루프 검사&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;33. 제어흐름 그래프가 다음과 같을 때 McCabe의 cyclomatic 수는 얼마인가?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-06-18 204139.png&quot; data-origin-width=&quot;137&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zJG17/btsknvsDhOP/skD2ZYLCcmjePCuJUKbo7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zJG17/btsknvsDhOP/skD2ZYLCcmjePCuJUKbo7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zJG17/btsknvsDhOP/skD2ZYLCcmjePCuJUKbo7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzJG17%2FbtsknvsDhOP%2FskD2ZYLCcmjePCuJUKbo7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;137&quot; height=&quot;130&quot; data-filename=&quot;스크린샷 2023-06-18 204139.png&quot; data-origin-width=&quot;137&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 3 &lt;u&gt;② 4&lt;/u&gt; ③ 5 ④ 6&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해설 : V(G) = Edge - Node + 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6 - 4 + 2 = 4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;34. 다음이 설명하는 애플리케이션 통합 테스트 유형은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 깊이 우선 방식 또는 너비 우선 방식이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상위 컴포넌트를 테스트 하고 점증적으로 하위 컴포넌트를 테스트 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하위 컴포넌트 개발이 완료되지 않은 경우 스텁(Stub)을 사용하기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 하향식 통합 테스트&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 상향식 통합 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 회귀 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 빅뱅 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;35. 알파, 베타 테스트와 가장 밀접한 연관이 있는 테스트 단계는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 단위 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 인수 테스트&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 통합 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 시스템 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;36. 다음이 설명하는 테스트 용어는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기 법 및 활동을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 종류에는 참, 샘플링, 휴리스틱, 일관성 검사가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 테스트 케이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 테스트 사나리오&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 테스트 오라클&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 테스트 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;37. 테스트 케이스에 일반적으로 포함되는 항목이 아닌 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 테스트 조건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 테스트 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 테스트 비용&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 예상 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;38. 필드 테스팅(field testing)이라고도 불리며 개발자 없이 고객의 사용 환경에 소프트웨어를 설치하여 검사를 수행 하는 인수검사 기법은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① 베타 검사&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 알파 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 형상 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 복구 검사&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;품질&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 항목으로 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 정확성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 무결성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 사용성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 간결성&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. SPICE 모델의 프로세스 수행능력 수준의 단계별 설명이 틀린 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 수준 7 - 미완성 단계&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 수준 5 - 최적화 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 수준 4 - 예측 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 수준 3 - 확립 단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. ISO 12207 표준의 기본 생명주기의 주요 프로세스에 해당하지 않는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 획득 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 개발 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 성능평가 프로세스&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 유지보수 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 소프트웨어 품질 관련 국제 표준인 ISO/IEC 25000에 관한 설명으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 소프트웨어 품질 평가를 위한 소프트웨어 품질평가 통합모델 표준이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② System and Software Quality Requirements and Evaluation으로 줄여서 SQuaRE라고도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ ISO/IEC 2501n에서는 소프트웨어의 내부 측정, 외부측정, 사용품질 측정, 품질 측정 요소 등을 다룬다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 기존 소프트웨어 품질 평가 모델과 소프트웨어 평가 절차 모델인 ISO/IEC 9126과 ISO/IEC 14598을 통합하 였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. &amp;lt;보기&amp;gt;에서 설명하는 소프트웨어 품질 요소를 옳게 짝지은 것은? ( ㈎ - ㈏ - ㈐ 순)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;보기&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;㈎ 사용자의 요구사항을 만족시키는 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;㈏ 프로그램 수행을 위한 자원의 최적화 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;㈐ 다른 시스템에 결합시키는 데 요구되는 노력의 정도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 유지보수성(maintainability) - 상호운영성(interoperability) - 정확성(correctness)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 정확성(correctness) - 상호운영성(interoperability) - 효율성(efficiency)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 정확성(correctness) - 효율성(efficiency) - 상호운영성(interoperability)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 상호운영성(interoperability) - 효율성(efficiency) - 유지보수성(maintainability)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. ISO의 소프트웨어 프로세스 평가를 위한 국제 표준인 SPICE에 대한 설명이다. 이에 해당하는 프로세스 범주는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템과 소프트웨어 제품을 개발하는 모든 프로세스, 즉 요구사항 분석(명세화), 설계, 구현, 테스트 등이 이 범 주에 속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 조직 프로세스(Organization Process)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 공학 프로세스(Engineering Process)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 고객－공급 프로세스(Customer-Supplier Process)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 지원 프로세스(Support Process)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. CMM(Capability Maturity Model) 모델의 레벨로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 최적단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 관리단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 정의단계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 계획단계&lt;/s&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유지보수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 소프트웨어 시스템 명세서의 유지 보수에 대한 설명으로 가장 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 명세서의 유지 보수란 명세서를 항상 최신의 상태로 만드는 것을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어는 계속 수정 보완되기 때문에 명세서도 따라서 보완되지 않으면 일관성을 유지하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 최신의 명세서는 필요한 경우 즉시 사용자에게 배포해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 시스템 개발자와 사용자는 동일한 명세서를 사용하기 때문에 시스템의 구조를 사용자도 잘 알고 있어야 한 다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 유지보수의 종류 중 소프트웨어 테스팅 동안 밝혀지지 않은 모든 잠재적인 오류를 수정하기 위한 보수 형태로서 오류의 수정과 진단 과정이 포함되는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Perfective maintenance(완전 유지보수) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어 시스템의 성능, 효율성, 유지보수성 또는 사용자 경험을 개선하기 위해 수행되는 활동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Adaptive maintenance(적응 유지보수) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;변화하는 환경에서 소프트웨어 시스템을 운영 가능한 상태로 유지하기 위해 시스템을 수정하는 작업을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Preventive maintenance(예방 유지보수) : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;잠재적인 소프트웨어 문제나 장애가 발생하기 전에 미리 대비하는 활동을 의미&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ &lt;u&gt;Corrective maintenance(수정 유지보수)&lt;/u&gt; : &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;소프트웨어 시스템에서 발생한 결함을 수정하는 활동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 소프트웨어 재공학 활동 중 원시 코드를 분석하여 소프트웨어 관계를 파악하고 기존 시스템의 설계 정보를 재발견하고 다시 제작하는 작업은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Analysis(분석)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② Reverse Engineering(역공학)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Restructuring(재구성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Migration(이식)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. S/W를 운용하는 &lt;u&gt;환경 변화&lt;/u&gt;에 대응하여 S/W를 변경하는 경우로 써, O/S와 Compiler 같은 개발환경의 변화 또는 Peripheral Device, System Component, element가 향상되거나 변경될 경우에 대처 가능한 Maintenance의 형태 는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Corrective(수정)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Perfective(완전)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Preventive(예방)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Adaptive(적응)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 소프트웨어 재공학의 주요활동 중 다음 설명에 해당하는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 소프트웨어를 분석하여 설계를 추정하는 것으로서, 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어 내는 작업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Analysis&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Restructuring&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Reverse Engineering&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Migration&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 유지보수의 활동 종류로 볼 수 없는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① Interfere Maintenance(방해)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Adaptive Maintenance(적응)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Perfective Maintenance(완전)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Preventive Maintenance(예방)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 소프트웨어 재사용에 대한 설명으로 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 새로운 개발 방법론의 도입이 어려워질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어 개발의 생산성이 향상된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 시스템 명세, 설계, 코드 등 문서의 공유도가 증가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 프로젝트 실패의 위험이 증가된다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. Software Reengineering의 필요성이 대두된 가장 주된 이유는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 구현의 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 설계의 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 요구사항 분석의 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 유지보수의 문제&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. Software Reengineering에 관한 설명으로 거리가 먼 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Restructuring(재구성)은 Reengineering의 한 유형으로 User requirement(사용자 요구사항)이나 기술적 설계의 변경 없이 Software를 개선하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② Redevelopment(재개발)와 Reengineering은 동일한 의미로 기존 시스템을 토대로 시스템을 개발하는 것이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ User Requirement(사용자 요구사항)를 변경시키지 않고, 기술적 설계를 변경하여 프로그램을 개선하는 것도 재공학이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 현재 시스템을 변경하거나 Restructuring(재구성)하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 소프트웨어 형상 관리(Configuration management)의 의미로 가장 적절한 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 비용에 관한 사항을 효율적으로 관리하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 개발 과정의 변경 사항을 관리하는 것&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 테스트 과정에서 소프트웨어를 통합하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 개발 인력을 관리하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 소프트웨어 재공학 활동 중 소프트웨어 기능을 변경하지 않으면서 소프트웨어를 형태에 맞게 수정하는 활동으 로서 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 표현 형태로 바꾸는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 분석(Analysis)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 역공학(Reverse Engineering&lt;u&gt;)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 이식(Migration)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 재구성(Restructuring)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. CASE(Computer-Aided Software Engineering)에 대한 설명으로 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 소프트웨어 부품의 재사용성을 향상시켜준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② Rayleigh-Norden 곡선의 노력 분포도를 기초로 한 생명 주기 예측 모형이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 생명 주기의 모든 단계를 연결시켜 주고 자동화시켜 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 소프트웨어의 유지보수를 용이하게 수행할 수 있도록 해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 장래의 유지보수성 또는 신뢰성을 개선하거나 소프트웨어의 오류발생에 대비하여 미리 예방수단을 강구해 두는 경우의 유지보수 형태는?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Corrective maintenance(수정)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Perfective maintenance(완전)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ Preventive maintenance(예방)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Adaptive maintenance(적응)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 소프트웨어 역공학(Software reverse engineering)에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 기존 소프트웨어의 구성 요소와 그 관계를 파악하여 설계도를 추출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 역공학의 가장 간단하고 오래된 형태는 재문서화라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 일반적인 개발 단계와는 반대 방향으로 기존 코드를 복구하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 대상 시스템 없이 새로운 시스템으로 개선하는 변경 작업이다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 컴포넌트 재사용을 위한 컴포넌트 기반 개발 활동에 대한 설명으로 가장 옳지 않은 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 후보 컴포넌트가 요구되는 기능을 수행하는지를 조사하기 위해 컴포넌트 검증을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 컴포넌트의 내부 처리 과정을 조사하고 코드를 수정하기 위해 블랙-박스 랩핑(Wrapping)을 적용한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 컴포넌트 라이브러리가 컴포넌트 확장 언어를 제공하면 그레이-박스 랩핑을 적용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 어플리케이션 구현을 위해 검증, 개작, 개발된 컴포넌트들을 조립하는 컴포넌트 합성을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 소프트웨어 형상 관리(Configuration Management)에 대한 설명으로 가장 타당한 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 개발 인력을 관리하는 것 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② 개발 과정의 변화되는 사항을 관리 하는 것&lt;/u&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 개발 일정을 관리 하는것 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 테스트과정에서 소프트웨어를 통합하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. S/W 유지보수 작업의 목적이 아닌 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 설계수정&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 예방조치 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 환경적응&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 하자보수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18. S/W 재공학 관점에서 가장 연관 깊은 유지보수 유형은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Adaptive maintenance(적응)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Perfective maintenance(완전)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Corrective maintenance(수정)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ Preventive maintenance(예방)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19. 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 아주 어려운 프로그램을 의미하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① &lt;u&gt;Alien Code&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Title Code &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Object Code&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Source Code&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20. 다음 중 상위 CASE 도구가 지원하는 주요기능으로 볼 수 없는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 모델들 사이의 모순검사 가능 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 전체 소스코드 생성 기능 &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/s&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 모델의 오류검증 기능 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 자료흐름도 작성 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21. S/W재공학 활동 중 기존 S/W를 다른 운영체제나 하드웨어 &lt;u&gt;환경&lt;/u&gt;에서 사용할 수 있도록 변환하는 작업은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 분석(Analysis)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 개조(Restructring) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 이식(Migration)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 역공학(Reverse Engineering)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22. 소프트웨어 재공학의 주요 활동 중 역공학에 해당하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 소프트웨어 동작 이해 및 재공학 대상 선정 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어 기능 변경 없이 소프트웨어 형태를 목적에 맞게 수정 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;③ 원시코드로부터 설계정보 추출 및 절차 설계표현, 프로그램과 데이터 구조 정보 추출 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 기존 소프트웨어 시스템을 새로운 기술 또는 하드웨어 환경이 이식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23. 외계인코드(Alien Code)를 가장 잘 설명한 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로그램의 로직이 복잡하여 이해하기 어려운 프로그램을 말한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 오류가 없어 디버깅 과정이 필요 없는 프로그램을 의미한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 사용자가 직접 작성한 프로그램을 의미한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램을 의미한다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24. 소프트웨어 재공학은 어떤 유지보수 측면에서 소프트웨어 위기를 해결하기 위한 방법인가? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;① Preventive maintenance&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Corrective maintenance &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Perfective maintenance&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Adaptive maintenance&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;25. 소프트웨어를 재사용함으로써 얻을 수 있는 이점으로 가장 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 새로운 개발 방법론 도입 용이&lt;/s&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 생산성 증가 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 소프트웨어 품질 향상 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 프로젝트 문서 공유&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26. CASE가 제공하는 기능으로 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 개발을 신속하게 할 수 있다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 개발 방법론을 생성할 수 있다. &amp;nbsp;&lt;/s&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 오류 수정이 쉬워 S/W 품질이 향상된다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ S/W개발 단계의 표준화를 기할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;27. CASE(Computer Aided Software Engineering)에 대한 설명으로 가장 옳지 않은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 프로그램의 구현과 유지보수 작업만을 중심으로 소프트웨어 생산성 문제를 해결한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/s&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어 생명주기의 전체 단계를 연결해 주고 자동화해 주는 통합된 도구를 제공한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 개발 과정의 속도를 향상시킨다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 소프트웨어 부품의 재사용을 가능하게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;28. 소프트웨어 개발 중 가장 많은 비용이 요구되는 단계는? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 분석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 설계 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 유지보수&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;29. Alien Code에 대한 설명으로 가장 옳은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로그램의 로직이 복잡하여 이해하기 어려운 프로그램을 의미한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② &lt;u&gt;아주 오래되거나 참고 문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램을 의미한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 오류(Error)가 없어 디버깅 과정이 필요 없는 프로그램을 의미한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 차세대 언어를 사용해 인공지능적인 API를 제공함으로써 사용자가 직접 작성한 프로그램을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30. 소프트웨어 개발 과정에서 사용되는 요구분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전 용의 소프트웨어 도구를 사용하여 자동화하는 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① CAD(Computer Aided Design) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② CAI(Computer Aided Instruction) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ CAT(Computer Aided Testing) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ CASE(Computer Aided Software Engineering)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;31. 소프트웨어 재사용에 대한 설명으로 가장 옳은 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 프로젝트 실패의 위험을 증가시킨다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 소프트웨어를 재사용함으로써 유지보수 비용이 높아진다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 모든 소프트웨어를 재사용해야 한다. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;④ 소프트웨어의 개발 생산성과 품질을 높이려는 주요 방법이다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;32. 소프트웨어 품질 관리 기술에서 품질 목표와 항목과 가장 거리가 먼 것은? &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 정확성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 종속성 &amp;nbsp;&lt;/s&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 유연성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 무결성&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UML &amp;amp; Design Pattern&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. UML에서 시퀀스 다이어그램의 구성 항목에 해당하지 않는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 생명선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 확장&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 메시지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. UML 다이어그램 중 정적 다이어그램이 아닌 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 컴포넌트 다이어그램&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 배치 다이어그램&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 순차 다이어그램&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 패키지 다이어그램&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. UML 다이어그램 중 순차 다이어그램에 대한 설명으로 틀린 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링 하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;② 주로 시스템의 정적 측면을 모델링 하기 위해 사용한다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 일반적으로 다이어그램의 수직 방향이 시간의 흐름을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 회귀 메시지(Self-Message), 제어블록(Statement block) 등으로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 유스케이스(Use Case)의 구성 요소 간의 관계에 포함되지 않는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 연관&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 확장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 구체화&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 일반화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 유스케이스 다이어그램(Use Case Diagram)에 관련된 내용으로 틀린 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;① 시스템과 상호작용하는 외부 시스템은 액터로 파악해서는 안된다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 유스케이스는 사용자 측면에서의 요구사항으로, 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 시스템 액터는 다른 프로젝트에서 이미 개발되어 사용되고 있으며, 본 시스템과 데이터를 주고받는 등 서로 연동되는 시스템을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 액터가 인식할 수 없는 시스템 내부의 기능을 하나의 유스케이스로 파악해서는 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. GoF(Gang of Four)의 디자인 패턴에서 행위 패턴에 속하는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Builder&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;② Visitor&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ Prototype&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Bridge&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 디자인 패턴 중에서 행위적 패턴에 속하지 않는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 커맨드(Command) 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 옵저버(Observer) 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ 프로토타입(Prototype) 패턴&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ 상태(State) 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. GoF(Gang of Four) 디자인 패턴을 생성, 구조, 행동 패턴의 세 그룹으로 분류할 때, 구조 패턴이 아닌 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Adapter 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② Bridge 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;③ Builder 패턴&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④ Proxy 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. GoF(Gangs of Four) 디자인 패턴 분류에 해당하지 않는 것은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 생성 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 구조 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 행위 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;④ 추상 패턴&lt;/s&gt;&lt;/p&gt;</description>
      <category>전공공부/정보처리기사</category>
      <category>소프트웨어공학</category>
      <category>정보처리기사</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/37</guid>
      <comments>https://hongjunwoo.tistory.com/37#entry37comment</comments>
      <pubDate>Mon, 19 Jun 2023 00:56:32 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 자바 기초, 변수, 타입, 연산자, 메소드, 조건문, 반복문, 배열, OOP, 자바API</title>
      <link>https://hongjunwoo.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기계어&lt;/b&gt; (machine language) : &lt;u&gt;컴퓨터가 이해하고 실행할 수 있는 0과 1로 이루어진 코드를 사용&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로그래밍 언어&lt;/b&gt; : &lt;u&gt;사람과 기계어 사이 다리 역할&lt;/u&gt;. C, C++, 자바, 파이썬&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소스(source)파일&lt;/b&gt; : &lt;u&gt;프로그래밍 언어로 작성한 파일&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;컴파일(compile)&lt;/b&gt; : &lt;u&gt;소스 파일을 기계어 파일로 번역. 담당하는 소프트웨어는 컴파일러&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바(Java) : 임베디드.웹,안드로이드 소프트웨어(SW) 개발분야&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램을 만드는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드를 통해 컴퓨터에게 명령하는 행위 / 코드(code)란 컴퓨터가 수행할 내용을 특정 언어로 작성한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컴퓨터의 장점을 활용한 기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 : 프로그래밍 언어로, 코드를 통해 컴퓨터에 명령할 수 있는 언어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 프로그래밍의 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 코드작성 - 컴퓨터에게 시킬 일을 자바 언어로 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 컴파일링 - 자바 코드가 컴파일러를 통해 바이트코드로 번역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 인터프리팅 - 바이트코드가 자바 가상 기계(JVM)에 의해 기계어로 통역&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 코드 실행 - 컴퓨터가 기계어를 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바의 특징&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 멀티플랫폼 언어 - 다양한 환경에서 실행되는 프로그래밍 언어. 운영환경에 따른 JVM을 제공함으로써 높은 이식성을 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;JVM(Java Virtual Machine)자바 가상머신&lt;/b&gt; : 운영체제에 상관없이 JAVA코드를 동일하게 작동시키는 역할. 오라클 홈페이지에서 무료배포 JVM의 역할을 하는 소프트웨어를 JAVA소프트웨어 또는 JRE라고 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 객체지향언어 - 객체를 조합하여 전체 프로그램을 만드는 기법(OOP)이 가능한 언어. 부품을 조립하듯 자바는 객체를 조합하여 전체 프로그램을 만들 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 경제적이고 효율적 - 하나의 JAVA코드를 만들면 모든 운영체제에서 동일하게 실행가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 간결한 프로그래밍 문법 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 메모리 자동 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 다양한 무료 라이브러리 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JDK&lt;/b&gt; : (&lt;b&gt;자바 개발 도구&lt;/b&gt; Java Development Kit)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;자바 언어로 소프트웨어를 개발할 때 필요한 환경(JVM) 및 개발도구(컴파일러)를 제공하는 역할&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바 프로그램을 작성하고 컴파일하는데 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- JDK에는 JRE가 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;자바 컴파일러와 실행 명령어는 JDK 설치폴더 \&lt;b&gt; bin&lt;/b&gt; 폴더에 있다&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVM5lJ/btsjQf6iBsw/Z3AARYwakYZHkPkJUj54Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVM5lJ/btsjQf6iBsw/Z3AARYwakYZHkPkJUj54Lk/img.png&quot; data-alt=&quot;JDK 버전 체계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVM5lJ/btsjQf6iBsw/Z3AARYwakYZHkPkJUj54Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVM5lJ%2FbtsjQf6iBsw%2FZ3AARYwakYZHkPkJUj54Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;395&quot; height=&quot;123&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JDK 버전 체계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;환경 변수&amp;nbsp;&lt;/b&gt;: &lt;u&gt;운영체제가 실행하는 데 필요한 정보를 제공해주는 변수. JAVA_HOME 환경변수 등록, Path 환경변수 수정&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 명령 프롬프트 실행문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. javac -version : JAVA 컴파일러 버전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Java -version : JRE 버전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. echo %JAVA_HOME% : JAVA_HOME 환경변수 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. echo %Path% : Path에 설정된 경로 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IDE&lt;/b&gt; (통합 개발 환경) : 개발 효율을 높이는 프로그램으로, 자바 코드의 컴파일과 실행 및 구문오류검증 등 개발을 위한 편의 기능 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;이클립스&lt;/u&gt;와 인텔리제이 IDEA가 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;이클립스&lt;/b&gt;에서 생성된 프로젝트는 폴더로 만들어지는데, &lt;u&gt;자바코드(.java)는 src폴더&lt;/u&gt;에 작성하고 이를 컴파일한 &lt;u&gt;바이트코드(.class)는&lt;b&gt; bin 폴더&lt;/b&gt;&lt;/u&gt;에서 자동으로 생성. bin폴더는 이클립스에서 보이지 않지만 윈도우 탐색기를 통해 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 프로그램 개발 과정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4PDV/btsjR8eBpHV/pUSbwNzLzK8hkP4KYGN3f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4PDV/btsjR8eBpHV/pUSbwNzLzK8hkP4KYGN3f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4PDV/btsjR8eBpHV/pUSbwNzLzK8hkP4KYGN3f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4PDV%2FbtsjR8eBpHV%2FpUSbwNzLzK8hkP4KYGN3f0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;181&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;바이트 코드 파일(.class)&lt;/b&gt; : 자바 소스 파일을 javac명령어로 컴파일한 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제에서 바로 실행할 수 없어 JVM이 완전한 기계어로 번역하고 실행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;JVM(자바가상기계 Java Virtual Machine)&lt;/b&gt;&amp;nbsp;: 바이트 코드 파일을 운영체제를 위한 완전한 기계어로 번역하고 실행. java명령어에 의해 구동&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 프로그램의 기본 작성 흐름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;클래스 선언&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스(class)란 자바 프로그램의 최소 단위. 적어도 하나의 클래스를 가져야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스는 이름의 첫 글자를 대문자로 하는 것이 관례이며 중괄호 내부에 여러 코드를 담을 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스 이름은 자바 코드의 파일명과 일치해야만 컴파일할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명명규칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 클래스명은 명사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 여러개의 단어가 섞이는 경우 각 단어의 첫번째 문자는 대문자(camelCase)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) class Cookie{} / class ChocoCookie{}&lt;/p&gt;
&lt;pre id=&quot;code_1686724910129&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HelloWorld {...}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;main() 메소드&lt;/b&gt; 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메인 메소드란 자바 프로그램의 시작점으로 중괄호 내부에 실행문을 담는다. 메인 메소드가 있어야 프로그램을 실행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드=함수 : 특정 동작을 수행하는 구문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명명규칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 메소드명은 동사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 여러개의 단어가 섞이는 경우 각 단어의 첫번째 문자는 대문자, 단 처음 시작하는 문자는 항상 소문자로 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) run() / runFast()&lt;/p&gt;
&lt;pre id=&quot;code_1686725054511&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HelloWorld { 
	public static void main(String[] args) { // 세줄이 메인메소드
		// 실행될 코드가 작성되는 위치
	} 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- public : 메소드의 접근제어자. '누구나 이 메소드에 접근할 수 있다' 의미. 그 외 private, protected&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- static : '이 메소드는 인스턴스 생성 없이 실행 할 수 있다' 의미. 객체를 만들지 않아도 호출가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- void : '메소드의 리턴값이 없음' 의미&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- String[ ] : 문자열을 나타내는 자바의 자료형.&amp;nbsp; [ ] : 한개가 아닌 여러개의 값으로 이루어진 배열을 의미&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- args : String[ ] 자료형에 대한 변수명&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;실행문(명령문)&lt;/b&gt;&amp;nbsp;작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실행문이란 프로그램 실행을 서술하는 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- System.out.println() 메소드는 표준 출력으로 데이터를 보내는 자바의 내장 메소드로 문자열을 화면에 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 각 실행문은 세미콜론(;)을 기준으로 구분 반드시 끝에 세미콜론을 붙여서 끝났음을 표&lt;/p&gt;
&lt;pre id=&quot;code_1686722940173&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package Hello; // 이클립스 패키지 선언

public class HelloWorld { // 클래스 선언
	public static void main(String[] args) { // 메소드 선언
		System.out.println(&quot;Hello World!&quot;); // 실행문 선언
	} 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. &lt;b&gt;주석&lt;/b&gt; 달기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주석이란 코드 설명을 위한 문법으로, 주석 처리된 코드는 실행되지 않는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 한줄주석 : '//'을 기준으로 해당 행의 끝까지를 주석처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 범위주석 : '/*' 와 '*/'로 감싸 코드를 주석처리&lt;/p&gt;
&lt;pre id=&quot;code_1686725753329&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 실행문의 종류 및
라인주석과 범위주석
실습 */

int x; //변수 x선언
x = 1; //변수 x에 1을 저장
int y = 2; //변수 y를 선언하고 2를 저장
int result = x+y; //변수 result를 선언하고 변수 x와 y를 더한 값을 저장
System.out.println(result); //println 메소드 호출&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구구단 출력&lt;/p&gt;
&lt;pre id=&quot;code_1686726285113&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class GuGu { 
	public static void main(String[] args) {
		int n; // 변수n에 정수값을 저장할 수 있음
		n = 4; // OK
	  //n = &quot;123&quot;; // 문자열이라 컴파일 오류
	} 
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686726438600&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;구구단 2단 코드
public class GuGu { 
	public static void main(String[] args) {
		int n = 2;

		System.out.println(n*1);
		System.out.println(n*2);
		System.out.println(n*3);
		System.out.println(n*4);
		System.out.println(n*5);
		System.out.println(n*6);
		System.out.println(n*7);
		System.out.println(n*8);
		System.out.println(n*9);
	} 
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686727623400&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;메소드를 추가해 객체를 생성해 2~9단 출력
public class GuGu { 
	public void dan(int n){ // dan 메소드 추가
		System.out.println(n*1);
		System.out.println(n*2);
		System.out.println(n*3);
		System.out.println(n*4);
		System.out.println(n*5);
		System.out.println(n*6);
		System.out.println(n*7);
		System.out.println(n*8);
		System.out.println(n*9);
	}
	public static void main(String[] args) {
		GuGu gg = new GuGu(); // GuGu클래스의 객체 생성
		gg.dan(2); // 객체를 통해 dan메소드 호출
		gg.dan(3);
		gg.dan(4);
		gg.dan(5);
		gg.dan(6);
		gg.dan(7);
		gg.dan(8);
		gg.dan(9);
	} 
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686727738476&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static 메소드로 선언하면 객체생성없이 dan메소드 호출만으로도 가능함
public class GuGu { 
	public static void dan(int n){ // dan 메소드 추가
		System.out.println(n*1);
		System.out.println(n*2);
		System.out.println(n*3);
		System.out.println(n*4);
		System.out.println(n*5);
		System.out.println(n*6);
		System.out.println(n*7);
		System.out.println(n*8);
		System.out.println(n*9);
	}
	public static void main(String[] args) {
		dan(2);
		dan(3);
		dan(4);
		dan(5);
		dan(6);
		dan(7);
		dan(8);
		dan(9);
	} 
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686728444214&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for문으로 구구단 출력
public class GuGu { 
	public void dan(int n){ // dan 메소드 추가
		for (int i=1; i&amp;lt;10; i++) { // i에 1~9까지의 값이 반복하여 대입(초기치;조건문;증가치)
			System.out.println(n*i);
		} 
	}
	public static void main(String[] args) {
		GuGu gg = new GuGu(); // GuGu클래스의 객체 gg 생성 또한 dan메소드가 static으로 선언됐으면 객체생성필요x
		for (int i=2; i&amp;lt;10; i++) {
			gg.dan(i);
		}
	} 
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수(variable) : 변하는 수(문자), 데이터를 저장하는 공간. &lt;u&gt;변수는 그릇&lt;/u&gt;. 변수는 컴퓨터 메모리 공간에 이름 붙여져 관리됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변수 선언 예&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int age = 21;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입 변수명 메모리공간(변수값)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수는 생성과 동시에 초기화한다. 초기화:초깃값을 정하는것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변수 명명규칙&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1) 변수 명을 통해 사용의도를 알 수 있게 지어야함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2) 임시적인 정수의 변수명은 i,j,k,m,n / 문자의 경우 c,d,e 등을 사용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(3) 특수문자중 _와 $만 사용할수있고, 숫자는 첫번째 자리에 위치할수없음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(4) 클래스와 동일하게 camelCase적용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(5) 자바의 키워드는 변수의 이름이 될 수 없음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 변수를 생성 및 초기화한뒤에도 값은 변경할 수 있음. 단 final키워드를 붙여 선언하는 상수는 변경불가 상수의 이름은 대문자와 밑줄로 생성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 문자열과 정수,실수가 연결(+)되면 문자열이 된다&lt;/p&gt;
&lt;pre id=&quot;code_1686734397127&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Hello {
    public static void main(String[] args) {
        String numStr = &quot;123&quot;;
        int n = 456;
        double m = 78.9;
        System.out.println(numStr + n + m);
    }
}
&amp;gt;&amp;gt;&amp;gt; &quot;12345678.9&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 형식문자열 출력은 printf()메소드를 사용한다 \n : 줄바꿈&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%s : 해당위치에 String값 삽입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%d : int&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%f : double&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%b : boolean&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc9j6O/btsj0dSVi6f/F9G72fuivfRNJWMMERexCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc9j6O/btsj0dSVi6f/F9G72fuivfRNJWMMERexCK/img.png&quot; data-alt=&quot;System.out.printf() 메소드 사용 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc9j6O/btsj0dSVi6f/F9G72fuivfRNJWMMERexCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc9j6O%2Fbtsj0dSVi6f%2FF9G72fuivfRNJWMMERexCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;657&quot; height=&quot;114&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;System.out.printf() 메소드 사용 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입 : 데이터의 형태. &lt;u&gt;그릇에 담길 내용물의 종류&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 타입 :int(정수형), double(실수형), boolean(논리형), char(문자형(' '))&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsobFf/btsjXVMAEhP/I7cqzig1pYZNOcogSS0eSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsobFf/btsjXVMAEhP/I7cqzig1pYZNOcogSS0eSk/img.png&quot; data-alt=&quot;자바의 데이터 기본타입 종류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsobFf/btsjXVMAEhP/I7cqzig1pYZNOcogSS0eSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsobFf%2FbtsjXVMAEhP%2FI7cqzig1pYZNOcogSS0eSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;287&quot; data-origin-width=&quot;807&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자바의 데이터 기본타입 종류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레퍼런스 타입 : 주소값을 갖는 데이터 형태. 문자열(&quot; &quot;)이 대표적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입변환 : double타입에 정숫값을 넣으면 에러가 나지않고 자동으로 실수로 변환된다. int타입에 실숫값을 넣으면 에러가 난다. 정수는 실수보다 범위가 작기 때문이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐스팅 : 타입을 강제로 바꾼다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다운캐스팅 : 넓은범위에서 좁은범위로 해석&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 업캐스팅 : 좁은범위에서 넓은범위로 해석&lt;/p&gt;
&lt;pre id=&quot;code_1686736021539&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;다운캐스팅
public class DownCasting {
    public static void main(String[] args) {
        double tall = 176.6; // 실수형이다
        double weight = 74.34;
        System.out.printf(&quot;신장: %dcm\n&quot;, (int)tall); // %d는 정수값인데, 변수tall이 실수값이라 에러남. (int)tall로 실수에서정수 다운캐스팅해준다
        System.out.printf(&quot;체중: %dkg\n&quot;, (int)weight); // (int)weight
    }
}
&amp;gt;&amp;gt;&amp;gt; 신장:176
	체중:74
    
문자열을 정수 및 실수로 변환    
public class StringToNumber {
    public static void main(String[] args) {
        String strSeven = &quot;7&quot;; // 문자열변수
        String strPi = &quot;3.14&quot;; // 문자열변수

        int a = Integer.parseInt(strSeven); // 문자열을 정수형으로 변환하는 메서드
        double b = Double.parseDouble(strPi); // 문자열을 실수형으로 변환하는 메서드

        double c = a + b; // 정수와 실수로 변환된a,b를 더해서 변수c에 대입

        System.out.printf(&quot;%d + %.2f = %.2f&quot;, a, b, c); // 7 + 3.14 = 10.14
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산자(operator) : 데이터 연산을 위한 기호&lt;/p&gt;
&lt;pre id=&quot;code_1686730992848&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;대입연산자(=) : 오른쪽 값을 왼쪽 변수에 저장하는 기호
String message; // String타입 변수 message를 생성
message = &quot;안녕?&quot;; // &quot;안녕?&quot; 문자열을 왼쪽 message 변수에 대입

산술연산자 : 숫자 계산을 위한 연산자
x = a+b // 더한값을 x에 대입
x = a-b // 뺀값을 대입
x = a*b // 곱한값 대입
x = a/b // a를 b로 나눈값을 x에 대입
x = a%b // a를 b로 나눈 나머지를 x에 대입

증감연산자 : 변숫값을 1만큼 증가 또는 감소
++a // a를 먼저 1만큼 증가(전위증가)
a++ // 문장수행이 끝난 뒤 a를 1만큼 증가(후위증가)
int a = 1;
int b = 1;
System.out.println(++a); 2출력 // a가 먼저 1증가되고 출력
System.out.println(++b); 0출력 // b가 먼저 1감소되고 출력
System.out.println(a++); 1출력 // a를 먼저 출력하고 다음에 변숫값을 증가
System.out.println(b++); 1출력 // b를 먼저 출력하고 다음에 변숫값을 감소&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;pre id=&quot;code_1686732228881&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;문자열을 다루기 위해서는 String 타입 변수가 필요하다
public class Greetings2 {
    public static void main(String[] args) {
        String name;    //문자열 변수 name 생성
        name = &quot;홍길동&quot;; //문자열 값 저장 (대입)
        
        System.out.println(name);  //출력할 변수명        
    }
}

정수 타입 변수
public class Exam {
    public static void main(String[] args) {
        int midScore;    // 중간 점수, 정수형 변수 생성 첫글자소문자 뒷글자대문자
        int finalScore;  // 기말 점수

        midScore = 68; // 변수에 대입할 값
        finalScore = 88;

        System.out.println(midScore); //출력할 변수명
        System.out.println(finalScore);
    }
}

실수 타입 변수
public class FilmRating {
    public static void main(String[] args) {
        double rating;  //실수형 변수 생성
        rating = 9.82; // 변수에 대입할 값

        System.out.println(rating);  //출력할 변수명
    }
}

논리형 변수
public class TangSoo6 {
    public static void main(String[] args) {
        boolean isBoomuk;  //논리형 변수 생성
        isBoomuk = true; // 대입할 논릿값 true or false

        System.out.println(isBoomuk);  //출력할 변수명
    }
}

변숫값 복사와 문자열연결
public class Copy {
    public static void main(String[] args) {
        String origin = &quot;가나다라&quot;;
        String copy = origin; // origin을 copy변수에 대입(복사)
        System.out.println(copy); // &quot;가나다라&quot;

        copy = copy + &quot;마바사&quot;; // &quot;가나다라&quot;가 들어있는 copy변수+&quot;마바사&quot;문자열을 copy변수에 대입
        System.out.println(copy); // &quot;가나다라마바사&quot;
    }
}

숫자 연산의 결과타입
public class Arithmetic {
    public static void main(String[] args) {
        int x = 7 / 2; //정수와 정수의 연산 = 정수표기
        double y = 7 * 2.0; //정수와 실수의 연산 = 실수표
        System.out.printf(&quot;x = %d, y = %f&quot;, x, y); //출력될 형식 문자열, 형식 문자열에 삽입될 변수값
    } // %f의 소수점이하 자리수를 원하는대로 표현하고 싶다면 %.Nf를 사용 예를들어 %.2f면 소수 셋째자리에서 반올림해서 둘째자리까지 나타내준다
}
&amp;gt;&amp;gt;&amp;gt; x = 3, y = 14.000000&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드 : 입력값에 따른 결과를 반환하는 일련의 코드 묶음. 간단한 호출만으로도 여러 줄의 코드를 수행할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRXPAj/btsjS44HCrx/LmrcDV8XA5WWKQECHroigK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRXPAj/btsjS44HCrx/LmrcDV8XA5WWKQECHroigK/img.png&quot; data-alt=&quot;메소드의 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRXPAj/btsjS44HCrx/LmrcDV8XA5WWKQECHroigK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRXPAj%2FbtsjS44HCrx%2FLmrcDV8XA5WWKQECHroigK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;599&quot; height=&quot;117&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;메소드의 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 메소드명 : 메소드의 이름. 호출 시 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;입력변수&lt;/b&gt; : 메소드 실행 시 입력값을 저장하는 변수, &lt;b&gt;매개변수 혹은 파라미터&lt;/b&gt;라고도 부름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 반환값 : 메소드의 최종결과로 반환될 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 반환타입 : 반환값의 타입을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 만든 메소드를 호출하려면 메인메소드에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt;&amp;gt; 메소드명(입력값)&lt;/p&gt;
&lt;pre id=&quot;code_1686738277033&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;자바에서 제공하는 메소드
public class Hello {
    public static void main(String[] args) {
        System.out.println(Math.abs(3.14)); //3.14출력. 절댓값메소드. 절댓값은 항상 양수임
        System.out.println(Math.max(10, 100)); // 100출력. 둘중에 더 큰값
        System.out.println(Math.min(10, 100)); // 10출력. 둘중에 더 작은값
    }
}

정사각형의 넓이구하는 단일 입력변수 메소드
public class Square {
    public static void main(String[] args) {
        int n = 4;
        int s = square(n); // n이 square메소드로 가면 n*n이 된다. 그걸 s에 대입
        System.out.printf(&quot;한 변의 길이가 %d인 정사각형의 넓이: %d&quot;, n, s);
    }
    // 정수를 입력받아 그 제곱을 반환하는 메소드
    public static int square(int length) {
        return length * length;
    }
}
&amp;gt;&amp;gt;&amp;gt; 한 변의 길이가 4인 정사각형의 넓이: 16

Math.random()메소드 입력변수가 없는 메소드
public class RandomNumber {
    public static void main(String[] args) {
        int n = rollDie();
        System.out.printf(&quot;주사위의 눈: %d&quot;, n);
    }

    public static int rollDie() {
        double x = 6 * Math.random(); // 0이상 6미만 난수 생성
        int temp = (int) x; // 다운캐스팅 0~5정수 저장
        return temp + 1; // 1~6정수 반환
    }
}

반환값이 없는 메소드 : void메소드
이 경우 반환타입은 void가 되고, return키워드는 생략가능
public class Ramyun {
    public static void main(String[] args) {
        buy(); // 메소드들 생성된 순서대로 아래에 호출
        boil();
        put();
        eat();
    }

    public static void boil() {
        System.out.println(&quot;물을 끓인다.&quot;);
    }

    public static void buy() {
        System.out.println(&quot;라면을 사온다.&quot;);
    }

    public static void eat() {
        System.out.println(&quot;맛있게 먹는다.&quot;);
    }

    public static void put() {
        System.out.println(&quot;라면을 넣는다.&quot;);
    }
}
&amp;gt;&amp;gt;&amp;gt; 라면을 사온다.
    물을 끓인다.
    라면을 넣는다.
    맛있게 먹는다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 메소드는 입력변수(파라미터)가 없을 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) void 메소드는 반환값이 존재하지 않으며 이때 return키워드는 생략가능하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 메소드 호출이 종료되면 실행 흐름은 호출된 위치로 돌아간다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1686771557452&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if문
if (조건식) {
	조건식이 참일경우 수행될 코드
}
의사코드 : 특정 동작을 사람의 언어와 코드의 중간 형태로 작성한 것
if (날씨가 덥다면) {
	에어컨을 켠다
}

public class AirConditioner {
    public static void main(String[] args) {
        turnOn(30);
        turnOn(19);
    }

    // 입력된 현재 온도를 기준 삼아, 에어컨 가동 문구를 출력
    public static void turnOn(int temperature) { // 메인메소드의 turnOn()메소드
        if (temperature &amp;gt; 25) { // 조건식
            System.out.printf(&quot;현재 온도 %d도, 에어컨을 가동합니다.&quot;, temperature);
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; 현재 온도 30도, 에어컨을 가동합니다. // 조건이 25초과면 출력이기 때문에 첫번째 메소드만 출력

if-else문 : 조건식이 참인경우 if문의 코드가, 거짓인 경우 else문의 코드가 수행
if (조건식) {
	조건식이 참인경우 수행할 내용
} else {
	조건식이 거짓인 경우 수행할 내용
}    

public class CannedBeer {
    public static void main(String[] args) {
        buy(20);
        buy(18);
    }

    // 입력 나이에 따라, 캔맥주 구매 가능 여부를 출력
    public static void buy(int age) {
        if (age &amp;gt;= 19) { // buy(age)가 19이상이면 출력하고
            System.out.printf(&quot;%d세, 캔맥주 구매 가능\n&quot;, age);
        } else { // 아니라면 이걸 출력
            System.out.printf(&quot;%d세, 캔맥주 구매 불가\n&quot;, age);
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; 20세, 캔맥주 구매 가능
    18세, 캔맥주 구매 불가
    
else-if문 : 추가 조건을 붙여야 할 때 사용
if (조건식 A) {
	조건식 A가 참일 때 수행될 코드
} else if (조건식 B) {
	조건식 B가 참일때 수행될 코드(조건식 A는 이미 거짓인 상황)
} else {
	그 외의 경우 수행될 코드(조건식 A와 B 모두 거짓인 상황)
}

public class Grade {
    public static void main(String[] args) {
        printGrade(96);
        printGrade(86);
        printGrade(70);
        printGrade(55);
    }

    // 점수를 입력받아, 학점을 출력하는 메소드
    public static void printGrade(int score) {
        String grade = &quot;&quot;; // 큰따옴표를 grade변수에 String타입으로 저장

        if (score &amp;gt;= 90) { // printGrade(score)가 90점 이상이면 grade A출력
            grade = &quot;A&quot;;
        } else if (score &amp;gt;= 80) { // 아니고, 80점이상이면 B출력
            grade = &quot;B&quot;;
        } else if (score &amp;gt;= 70) { // 그것도아니고 70점이상이면 C출력
            grade = &quot;C&quot;;
        } else { // 다 아니면 F출력
            grade = &quot;F&quot;;
        }
        System.out.printf(&quot;%d점의 학점: %s\n&quot;, score, grade);
    }
}
&amp;gt;&amp;gt;&amp;gt; 96점의 학점: A
    86점의 학점: B
    70점의 학점: C
    55점의 학점: F
    
switch문 : 상황case에 따라 수행코드를 나누는 문법   
public class TrafficLight {
    public static void main(String[] args) {
        light(&quot;RED&quot;);
        light(&quot;YELLOW&quot;);
        light(&quot;GREEN&quot;);
        light(&quot;BLUE&quot;);
    }

    // 색을 입력받아, 신호등 불빛을 출력하는 메소드
    public static void light(String color) {
        switch (color) { // 기준값 입력변수 color
            case &quot;RED&quot;: // 상태값들
                System.out.println(&quot;빨간불이 켜집니다.&quot;);
                break; // 실행흐름을 switch문으로부터 탈출시킴
            case &quot;YELLOW&quot;:
                System.out.println(&quot;노란불이 켜집니다.&quot;);
                break;
            case &quot;GREEN&quot;:
                System.out.println(&quot;초록불이 켜집니다.&quot;);
                break;
            default: // 어떤 case와도 매치되지 않을때 실행되는 부분 switch문의 마지막에 있기때문에 break문 사용안함
                System.out.printf(&quot;에러, 잘못된 색 입력: %s\n&quot;, color);
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; 빨간불이 켜집니다.
    노란불이 켜집니다.
    초록불이 켜집니다.
    에러, 잘못된 색 입력: BLUE
    
삼항 연산자 : 조건식에 따른 반환값을 지정하는 문법. 조건식이 참이면 A,거짓이라면 B반환
(조건식) ? A : B;

public class OddOrEven {
    public static void main(String[] args) {
        printResult(13);
        printResult(6);
    }

    // 정수를 입력받아, 홀수나 짝수 여부를 출력하는 메소드
    public static void printResult(int n) {
        String result = (n % 2 == 0) ? &quot;짝수&quot; : &quot;홀수&quot;; // 짝수(참)인경우 짝수, 거짓(홀수)인경우 홀수출력
        System.out.printf(&quot;정수 %d은 %s입니다.\n&quot;, n, result);
    }
}
&amp;gt;&amp;gt;&amp;gt; 정수 13은 홀수입니다.
    정수 6은 짝수입니다.&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교연산자 : 두 값을 비교해 참인경우 true, 아니면 false 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;System.out.println(7&amp;gt;4); // true&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3y0Gq/btsjYeyULdb/mPvVwqjrpCtSg4uP6sw3RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3y0Gq/btsjYeyULdb/mPvVwqjrpCtSg4uP6sw3RK/img.png&quot; data-alt=&quot;비교연산자 종류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3y0Gq/btsjYeyULdb/mPvVwqjrpCtSg4uP6sw3RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3y0Gq%2FbtsjYeyULdb%2FmPvVwqjrpCtSg4uP6sw3RK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;481&quot; height=&quot;196&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비교연산자 종류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리연산자 : 두 논릿값을 토대로 새 논릿값을 반환하는 기호 AND(&amp;amp;&amp;amp;) OR(||) NOT(!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) AND(&amp;amp;&amp;amp;) 연산자 : 논릿값 둘다 참인 경우에만 참, 그외는 거짓&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) OR(||) 연산자 : 두 논릿값중 하나라도 참이면 참, 둘다 거짓인 경우에만 거짓&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) NOT(!) 연산자 : 논릿값의 결과를 반대로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교연산자가 논리연산자보다 먼저 연산되며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리연산자 간 우선순위는 NOT&amp;gt;AND&amp;gt;OR&lt;/p&gt;
&lt;pre id=&quot;code_1686776322235&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Scholarship {
    public static void main(String[] args) {
        printScholarship(&quot;Park&quot;, 100, 92);
        printScholarship(&quot;Kim&quot;, 82, 96);
        printScholarship(&quot;Choi&quot;, 82, 88);
    }

    // 정수를 입력받아, 홀수나 짝수 여부를 출력하는 메소드
    public static void printScholarship(String name, int math, int eng) {
        String result = &quot;&quot;;

        if (math &amp;gt;= 90 &amp;amp;&amp;amp; eng &amp;gt;= 90) { // math90이상 '이고' eng 90이상이면 출력
            result = &quot;전액 장학금!&quot;;
        } else if (math &amp;gt;= 90 || eng &amp;gt;= 90) { // 아니고 둘중에하나'라도' 90이상이면 출력
            result = &quot;반액 장학금!&quot;;
        } else { // 둘다 아니면 출력
            result = &quot;다음 기회에~&quot;;
        }
        System.out.printf(&quot;%s =&amp;gt; %s\n&quot;, name, result);
    }
}
&amp;gt;&amp;gt;&amp;gt; Park =&amp;gt; 전액 장학금!
    Kim =&amp;gt; 반액 장학금!
    Choi =&amp;gt; 다음 기회에~&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1686779151533&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while문 : 반복횟수가 명확하지 않을때(조건에 따라 변할때) 사용하기 적합한 반복문
while (a조건식) {
	b반복내용 // 참일때 수행될코드. 조건식이 거짓이 될때까지 a&amp;gt;b, a&amp;gt;b 무한반복
}

public class Ex5_1 {
    public static void main(String[] args) {
        int n = 1;
        while (n &amp;lt; 4) { // 조건식
            System.out.println(n); // 해당 값 출력
            n++; // n = n + 1; n을 1씩 증가. 3까지 출력하고 여기서 4가 됐으면 while문에서 탈출하고 마지막 END출력
        }
        System.out.println(&quot;END&quot;);
    }
}
&amp;gt;&amp;gt;&amp;gt; 1
    2
    3
    END
    
public class WhileCountdown {
    public static void main(String[] args) {
        countdown(5); // 카운트다운 메소드 작성
    }

    public static void countdown(int num) { //countdown(5)가 num에 대입됨
        System.out.println(&quot;카운트다운을 시작합니다.&quot;);
        while (num &amp;gt;= 0) { // 5&amp;gt;=0
            System.out.printf(&quot;%d..\n&quot;, num);
            num--; // -1이되면 탈출
        }
        System.out.println(&quot;발사!!&quot;); // while문 탈출하면 출력
    }
}
&amp;gt;&amp;gt;&amp;gt; 카운트다운을 시작합니다.
    5..
    4..
    3..
    2..
    1..
    0..
    발사!!
    
for문 : 반복횟수가 명확할때 사용하기 편리한 반복문
for (a초기화; b조건식; d갱신) {
	c반복내용 // 초기화값으로 b&amp;gt;C&amp;gt;d 반복(거짓이될때까지)
}

public class Ex5_4 {
    public static void main(String[] args) {
        for (int i = 1; i &amp;lt;= 9; i++) {
            System.out.printf(&quot;3 x %d = %d\n&quot;, i, 3 * i);
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; 3 x 1 = 3
    3 x 2 = 6
    3 x 3 = 9
    3 x 4 = 12
    3 x 5 = 15
    3 x 6 = 18
    3 x 7 = 21
    3 x 8 = 24
    3 x 9 = 27
    
public class Ex5_5 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i &amp;lt;= 10; i++) {
            sum += i; // sum = sum + i;
        }
        System.out.printf(&quot;총합: %d&quot;, sum);
    }
}
&amp;gt;&amp;gt;&amp;gt; 총합: 55

public class Ex5_5 {
    public static void main(String[] args) {
        int num = 5;
        while (--num &amp;gt; 0) {// 전위연산이라 4,3,2,1 총 네번
            System.out.print(&quot;* &quot;); // num변수가 0초과면 별출력
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; * * * *

public class Ex5_5 {
    public static void main(String[] args) {
        for (int i = 0; i &amp;lt;=5; i++) { // 후위연산이니 0,1,2,3,4,5 총 6번 별 출력
            System.out.print(&quot;* &quot;);
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; * * * * * *

이중for문으로 별계단 만들기
public class Ex5_5 {
    public static void main(String[] args) {
        for (int i = 0; i &amp;lt;= 5; i++) { // 외부 for 루프: 계단의 총 단계 수
            for (int j = 0; j &amp;lt;= i; j++) { // 내부 for 루프: 현재 단계에서의 별 출력 수
                System.out.print(&quot;* &quot;);
            }
            System.out.println(); // 한 단계가 끝나면 줄바꿈
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; * 
    * * 
    * * * 
    * * * * 
    * * * * * 
    * * * * * *
    
break문 : 분기문. 반복문을 탈출하는 문법. 반복내용수행하고 갱신하기전에 탈출(switch문의 탈출에도 사용됨)
public class Ex5_6 {
    public static void main(String[] args) {
        for (int i = 1; i &amp;lt;= 10; i++) {
            System.out.printf(&quot;i = %d, &quot;, i); // 1,2,3까지 출력
            if (i == 3) { // 1,2,3까지 출력하고 i=3이 됐으니 더이상 후위연산(갱신)하지않고 탈출
                break;
            }
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; i = 1, i = 2, i = 3,

continue문 : 실행흐름을 다음반복으로 넘기는 문법.코드를 수행하지 않은채 갱신하고 다음반복으로 이동
public class ContinueSamYukGu {
    public static void main(String[] args) {
        for (int i = 1; i &amp;lt;= 10; i++) {
            if (i == 3 || i == 6 || i == 9) { // i가 3 or 6 or 9와같으면
                System.out.printf(&quot;짝 &quot;); // 출력한뒤
                continue; // 다음반복으로 넘어감
            }
            System.out.printf(&quot;%d &quot;, i);
        }
    }
}
&amp;gt;&amp;gt;&amp;gt; 1 2 짝 4 5 짝 7 8 짝 10&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열(array) : 여러 데이터를 하나로 묶은 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특정 대상을 가리키는 레퍼런스 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-배열 사용방법과 반복문에 배열 사용법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입[ ] 변수명 = {타입의 배열};&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for(초기값;, 조건;, 갱신) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; System.out.println(변수명[i]);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 배열에 담긴 데이터는 타입 유형이 같다. 애초에 같은타입에 둘러쌓여져있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 배열 속 데이터는 인덱스로 구분된다. 0부터 시작된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 배열은 한번 만들어지면 그 길이(인덱스범위)가 변할수없다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 배열의 길이는 System.out.println(변수명.length) 길이는 1부터센다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btWEcU/btsj09QFd8U/nisLk8eURGIaxQ21DgyFyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btWEcU/btsj09QFd8U/nisLk8eURGIaxQ21DgyFyK/img.png&quot; data-alt=&quot;정수형 배열과 정수형 변수들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btWEcU/btsj09QFd8U/nisLk8eURGIaxQ21DgyFyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtWEcU%2Fbtsj09QFd8U%2FnisLk8eURGIaxQ21DgyFyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;229&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정수형 배열과 정수형 변수들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F3vbK/btsjX522L5i/N2lfF2WQC0JoeFkUQb2PK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F3vbK/btsjX522L5i/N2lfF2WQC0JoeFkUQb2PK1/img.png&quot; data-alt=&quot;배열을 사용한 반복문&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F3vbK/btsjX522L5i/N2lfF2WQC0JoeFkUQb2PK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF3vbK%2FbtsjX522L5i%2FN2lfF2WQC0JoeFkUQb2PK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;349&quot; height=&quot;218&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;배열을 사용한 반복문&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1686780278057&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;배열만드는 방법

1. 초기화를 통한 생성 : 중괄호 안에 초깃값을 명시하여 만드는 방법
타입[] 변수명 = {배열의 초깃값들};

Q.데이터를 배열로 만들기
나컴공 학생의 학점 : 1학년(3.45),2학년(2.82),3학년(3.85),4학년(3.94)

double[] grades = {3.45, 2.82, 3.85, 3.94};

2. 길이 지정을 통한 생성 : new키워드와 배열의 타입,길이정보를 명시
타입[] 변수명 = new 타입[길이수];
// x칸길이의 x타입배열을 만들고 이를 레퍼런스변수로 가리키게함
이는 배열의 초깃값이 모두 0(int), 0.0(double), false(boolean), null(string)

Q.길이가 7인 문자열 배열의 코드 작성

String[] strArr = new String[7];&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686780820157&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;배열 출력하기 : 변수명[인덱스번호]
public class Ex6_1 {
    public static void main(String[] args) {
        String[] names = {&quot;Sam&quot;, &quot;Kate&quot;, &quot;John&quot;, &quot;Jenny&quot;}; // 배열 생성

        System.out.println(names[0]); // &quot;Sam&quot; 출력
        System.out.println(names[1]); // &quot;Kate&quot; 출력
        System.out.println(names[2]); // &quot;John&quot; 출력
        System.out.println(names[3]); // &quot;Jenny&quot; 출력
    }
}

public class Ex6_1 {
    public static void main(String[] args) {
        String[] strArr = {&quot;프로그래밍&quot;, &quot;완전&quot;, &quot;너무&quot;, &quot;싫어&quot;, &quot;노는게&quot;, &quot;좋아요&quot;, &quot;별로&quot;};
        System.out.printf(&quot;%s, %s %s!&quot;, strArr[0], strArr[1], strArr[5]);
    }
}
&amp;gt;&amp;gt;&amp;gt; 프로그래밍, 완전 좋아요!

길이지정을 통해 생성한 배열값 쓰기(변경)
public class Ex6_2 {
    public static void main(String[] args) {
        int[] sales = new int[5]; // 비어있는 정수형 배열 생성

        sales[0] = 52; // 비어있는 길이 5짜리 배열에 인덱스 추가
        sales[1] = 50; 
        sales[2] = 55; 
        sales[3] = 42; 
        sales[4] = 38; 

        int sum = sales[0] + sales[1] + sales[2] + sales[3] + sales[4];
        System.out.printf(&quot;총 판매량: %d잔&quot;, sum);
    }
}
&amp;gt;&amp;gt;&amp;gt; 총 판매량: 237잔&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686781652389&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;배열과 반복문
public class Ex6_3 {
    public static void main(String[] args) {
        int[] arr = {88, 76, 92, 68, 55, 48, 82};
        int sum = 0;
        for (int i = 0; i &amp;lt; arr.length; i++) { // i가 배열의 모든 인덱스를 순회
            sum += arr[i]; // sum = sum+arr[i] 배열의 i번째 인덱스값을 누적
        }
        System.out.printf(&quot;총합: %d&quot;, sum);
    }
}
&amp;gt;&amp;gt;&amp;gt; 총합: 509

public class Ex6_5 {
    public static void main(String[] args) {
        int[] runningMinutes = {42, 66, 57, 54, 88, 64, 71};
        int sum = 0;
        for (int i = 0; i &amp;lt; runningMinutes.length; i++) {
            sum += runningMinutes[i];
        }
        double average = (double) sum / runningMinutes.length;
        System.out.printf(&quot;총합: %d분\n&quot;, sum);
        System.out.printf(&quot;평균: %d분 %.0f초\n&quot;, (int) average, 60 * (average % 1));
    }
}
&amp;gt;&amp;gt;&amp;gt; 총합: 442분
    평균: 63분 9초&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686782229634&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;메소드로 배열 전달하기
public class ArrayToParameter {
    public static void main(String[] args) {
        int[] evens = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18}; // 짝수 배열 evens 생성
        int[] primes = {2, 3, 5, 7, 11, 13, 17, 19}; // 소수 배열 primes 생성

        int evenSum = sum(evens); // evens배열을 sum메소드호출해 evenSum변수로 저장
        int primeSum = sum(primes);

        System.out.printf(&quot;짝수 배열의 합: %d\n&quot;, evenSum);
        System.out.printf(&quot;소수 배열의 합: %d\n &quot;, primeSum);
    }

    public static int sum(int[] arr) { // evens가 입력변수 arr에 대입되어 두 변수는 같은 배열을 가리킴
        int sum = 0;
        for (int i = 0; i &amp;lt; arr.length; i++) {
            sum += arr[i]; // 지역변수 sum을 생성하고 반복문을 돌며 배열의 총합을 계산
        }
        return sum; // sum은 메소드 종료와 함께 호출위치로 반환한다 반환값이 evenSum에 대입
    }
}
&amp;gt;&amp;gt;&amp;gt; 짝수 배열의 합: 90
    소수 배열의 합: 77&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686782637836&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;문자열(String)을 문자(char)의 배열로 바꾸는 방법 : char[] 변수명 = str.toCharArray();
문자(char)란 한 글자를 의미하는 타입. 작은따옴표로 감쌈
public class Ex6_7 {
    public static void main(String[] args) {
        String str = &quot;Programming is fun! Right?&quot;;
        char[] charArr = str.toCharArray(); // 문자열 str을 문자(char)의 배열로 반환
        int count = 0;

        for (int i = 0; i &amp;lt; charArr.length; i++) {
            if (charArr[i] == 'R' || charArr[i] == 'r') { // 문자배열을 순회하며 R또는 r을찾음
                count++;
            }
        }
        System.out.println(str);
        System.out.printf(&quot;=&amp;gt; R(r)의 개수: %d&quot;, count);
    }
}
&amp;gt;&amp;gt;&amp;gt; Programming is fun! Right?
    =&amp;gt; R(r)의 개수: 3&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686783029998&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;이차원배열 : 기본배열(일차원배열)을 묶어 새로운 배열을 이루는 형태
public class Ex6_8 {
    public static void main(String[] args) {
        int[][] gugudan = new int[10][10]; // 일차원배열 10개를 묶어만든 이차원배열
        for (int i = 1; i &amp;lt;= 9; i++) {
            for (int j = 1; j &amp;lt;= 9; j++) {
                gugudan[i][j] = i * j; // 구구단 결과를 저장
            }
        }
        System.out.printf(&quot;2 x 7 = %d\n&quot;, gugudan[2][7]); // 2번인덱스가 가리키는곳의 7번인덱스요소
        System.out.printf(&quot;9 x 4 = %d\n&quot;, gugudan[9][4]);
    }
}
&amp;gt;&amp;gt;&amp;gt; 2 x 7 = 14
    9 x 4 = 36&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체지향 프로그래밍(OOP) Object - Oriented Programming&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램을 조립하여 부분별로 만든 뒤 전체 프로그램을 구성하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자전거를 프로그램이라고 한다면, 바퀴,몸체등의 부품은 객체가 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체지향 프로그래밍의 장정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 유지 보수성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- OOP기반 프로그램은 객체별 관리기능이 있어 문제가 생기더라도 특정 객체의 코드만 고치면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 코드 재사용성 (재활용성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 프로그램 확장성 (확장성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스(class) : 객체의 설계도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자전거 부품 하나하나의 설계도가 필요하듯 객체를 만들려면 클래스가 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체(object) : 클래스를 토대로 만들어진 프로그램의 구성요소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스(설계도)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 객체(인스턴스)(부품)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 프로그램(자전거)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(인스턴스화)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스화 : 클래스를 토대로 객체를 만드는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스 : 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체를 미리 구상하는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체의 상태(state)와 동작(behavior)을 정의하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상태=변수 / 동작=메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스는 객체가 가질 &lt;u&gt;상태를 필드 / 동작을 메소드&lt;/u&gt;로 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필드(상태) / 메소드(동작)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 다이어그램(class diagram) : 클래스를 도식화한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캡슐화 : 관련 데이터와 코드를 하나의 단위로 묶는것. 클래스는 필드와 메소드를 묶는 캡슐화의 대표적 예&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8BDoo/btsjTv9kQoR/nwHGc0STpLSYQPLM0ES15k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8BDoo/btsjTv9kQoR/nwHGc0STpLSYQPLM0ES15k/img.png&quot; data-alt=&quot;클래스 다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8BDoo/btsjTv9kQoR/nwHGc0STpLSYQPLM0ES15k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8BDoo%2FbtsjTv9kQoR%2FnwHGc0STpLSYQPLM0ES15k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;389&quot; height=&quot;184&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클래스 다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1686788506987&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Cat { // 클래스 만들고
	String name; // 클래스 안쪽 필드(상태)를 변수로 작성
    String breeds;
    double weight;
    
    void claw() { // 메소드(동작) 영역 정의
    	System.out.println(&quot;할퀴기&quot;);
    }
    
    void meow() { // 메소드에 public static 키워드는 사용하지 않음
    	System.out.println(&quot;야옹&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;클래스&lt;/b&gt;란 객체의 설계도이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 클래스를 토대로 객체를 만드는 과정을 &lt;b&gt;인스턴스화&lt;/b&gt; 라고 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 클래스는 상태를 의미하는 &lt;b&gt;필드&lt;/b&gt;와 동작을 의미하는 &lt;b&gt;메소드&lt;/b&gt;로 구성된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 생성 형식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;new 키워드&lt;/b&gt;와 함께 클래스명과 소괄호를 적어 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMTbLz/btsjXJF52vR/vJPCogixMI2r5I41AWkGx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMTbLz/btsjXJF52vR/vJPCogixMI2r5I41AWkGx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMTbLz/btsjXJF52vR/vJPCogixMI2r5I41AWkGx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMTbLz%2FbtsjXJF52vR%2FvJPCogixMI2r5I41AWkGx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;358&quot; height=&quot;38&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;39&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성 객체를 다시 사용하기 위해 레퍼런스 변수를 활용할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B8oYW/btsjYrLBolj/UNBdjsNgRyY0tDN4SOSdS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B8oYW/btsjYrLBolj/UNBdjsNgRyY0tDN4SOSdS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B8oYW/btsjYrLBolj/UNBdjsNgRyY0tDN4SOSdS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB8oYW%2FbtsjYrLBolj%2FUNBdjsNgRyY0tDN4SOSdS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;349&quot; height=&quot;76&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 생성 과정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcArae/btsjYN1Y2fE/jfSnuucPLknLv2siyZHC90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcArae/btsjYN1Y2fE/jfSnuucPLknLv2siyZHC90/img.png&quot; data-alt=&quot;Cat 클래스를 객체로 만드는 예&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcArae/btsjYN1Y2fE/jfSnuucPLknLv2siyZHC90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcArae%2FbtsjYN1Y2fE%2FjfSnuucPLknLv2siyZHC90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;429&quot; height=&quot;76&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Cat 클래스를 객체로 만드는 예&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인스턴스변수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체속에 존재하는 필드(상태)를 인스턴스변수라고 함&lt;/p&gt;
&lt;pre id=&quot;code_1686789512443&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cat 객체의 인스턴스변수 name, breeds, weight를 출력하는 예
System.out.printf(&quot;이름: %s\n&quot;. c.name); // c(가 가리키는)객체의 name / 닷 연산자로 객체접근
System.out.printf(&quot;품종: %s\n&quot;. c.breeds); // c(가 가리키는)객체의 breeds
System.out.printf(&quot;체중: %.2fkg\n&quot;. c.weight); // c(가 가리키는)객체의 weight
&amp;gt;&amp;gt;&amp;gt; 이름: null // 비어있는 String타입은 초기값이 null
    품종: null
    체중: 0.00kg // 비어있는 double타입은 초기값이 0.0이지만 %.2f라고 소수둘째까지 표기&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 닷(.) 연산자로 객체접근을 하며 인스턴스변수를 변경할수도 있다&lt;/p&gt;
&lt;pre id=&quot;code_1686789798241&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;총정리 코드
public class Cat {
    String name; // 이름
    String breeds; // 품종     필드(인스턴스변수)
    double weight; // 체중

    void claw() {
        System.out.println(&quot;할퀴기!!&quot;); // 메소드(인스턴스메소드)
    }
    void meow() {
        System.out.println(&quot;야옹~&quot;);
    }

    public static void main(String[] args) { // 메인메소드
        Cat c = new Cat(); // 객체생성

        // 객체 상태(필드) 변경
        c.name = &quot;네로&quot;;
        c.breeds = &quot;페르시안&quot;;
        c.weight = 4.37;

        // 객체 상태(필드) 출력
        System.out.printf(&quot;이름: %s\n&quot;, c.name);
        System.out.printf(&quot;품종: %s\n&quot;, c.breeds);
        System.out.printf(&quot;체중: %.2fkg\n&quot;, c.weight);
    }
}
&amp;gt;&amp;gt;&amp;gt; 이름: 네로
    품종: 페르시안
    체중: 4.37kg&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인스턴스 메소드&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특정 객체가 주체가 되어 수행하는 동작&lt;/p&gt;
&lt;pre id=&quot;code_1686790725891&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;하나의 클래스로 여러객체 만들기
public class Dog { // 클래스명
    String name; // 이름
    String breeds; // 품종 // 필드(인스턴스변수)
    int age; // 나이

    void wag() { // 메소드(인스턴스메소드)
        System.out.printf(&quot;[%s] 살랑살랑~\n&quot;, name);
    }

    void bark() { // 메소드 오버로딩:이름이 같은 메소드 입력변수의 개수또는 타입으로 구분
        System.out.printf(&quot;[%s] 멍멍!\n&quot;, name);
    }

    void bark(int times) { // 이름이 같은 두 메소드
        String sound = &quot;컹컹!&quot;;
        System.out.printf(&quot;[%s] %s(x%d)\n&quot;, name, sound, times);
    }

    public static void main(String[] args) { // 메인메소드 실행흐름 담당
        Dog d1 = new Dog(); // 객체생성
        Dog d2 = new Dog(); // 하나의 클래스로 여러객체를 만들수있다

        d1.name = &quot;망고&quot;; // 두 객체의 필드(인스턴스변수)변경
        d1.breeds = &quot;골든리트리버&quot;; // 원래는 초기값으로 되어있었음 문자열은 null, 정수형은 0
        d1.age = 2;
        d2.name = &quot;까미&quot;;
        d2.breeds = &quot;믹스&quot;;
        d2.age = 3;

        System.out.printf(&quot;d1 =&amp;gt; {%s, %s, %d세}\n&quot;,d1.name, d1.breeds, d1.age); // 두 Dog객체의 정보출력
        System.out.printf(&quot;d2 =&amp;gt; {%s, %s, %d세}\n&quot;,d2.name, d2.breeds, d2.age);

        d1.wag(); // 꼬리치기 // 인스턴스 메소드 호출
        d2.bark(); // 짖기
        d1.bark(3); // 짖기 3회
    }
}
&amp;gt;&amp;gt;&amp;gt; d1 =&amp;gt; {망고, 골든리트리버, 2세}
    d2 =&amp;gt; {까미, 믹스, 3세}
    [망고] 살랑살랑~
    [까미] 멍멍!
    [망고] 컹컹!(x3)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;메소드 오버로딩&lt;/b&gt;(method overloading) : 이름이 같은 메소드를 입력변수의 개수 또는 타입으로 구분하는 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) &lt;b&gt;new&lt;/b&gt; 키워드는 객체 생성을 위해 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 레퍼런스변수와 &lt;b&gt;닷 연산자&lt;/b&gt;는 객체의 필드와 메소드 접근에 사용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 객체 속에 존재하는 필드를 &lt;b&gt;인스턴스변수&lt;/b&gt;라고 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4) 특정 객체가 주체가 되어 수행하는 동작을 &lt;b&gt;인스턴스 메소드&lt;/b&gt;라고 한다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자(constructor) : 클래스로부터 객체를 만드는 특별한 메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 붕어빵을 만드려면 붕어빵 틀에 재료를 넣고 구워야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체를 만드려면 클래스라는 틀에 재료를 넣어야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자 호출은 반드시 new키워드와 함께 호출되어야 하고 메소드명이 클래스와 같아야함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckJ6eO/btsj05t1xWl/7NwBb9jJ27LOcJ2f1D2WYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckJ6eO/btsj05t1xWl/7NwBb9jJ27LOcJ2f1D2WYK/img.png&quot; data-alt=&quot;생성자의 혁할&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckJ6eO/btsj05t1xWl/7NwBb9jJ27LOcJ2f1D2WYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckJ6eO%2Fbtsj05t1xWl%2F7NwBb9jJ27LOcJ2f1D2WYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;553&quot; height=&quot;197&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생성자의 혁할&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자를 활용하여 아래와 같이 변경할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;35&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/19KXm/btsjZGhef8U/Stzji3BjDKkjaLkCFAgoh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/19KXm/btsjZGhef8U/Stzji3BjDKkjaLkCFAgoh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/19KXm/btsjZGhef8U/Stzji3BjDKkjaLkCFAgoh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F19KXm%2FbtsjZGhef8U%2FStzji3BjDKkjaLkCFAgoh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;30&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;35&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnOnvA/btsjXu3otUw/3kgGqzN5XBx2TnJQrJqeC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnOnvA/btsjXu3otUw/3kgGqzN5XBx2TnJQrJqeC1/img.png&quot; data-alt=&quot;생성자 정의 예&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnOnvA/btsjXu3otUw/3kgGqzN5XBx2TnJQrJqeC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnOnvA%2FbtsjXu3otUw%2F3kgGqzN5XBx2TnJQrJqeC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;347&quot; height=&quot;266&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생성자 정의 예&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메소드 정의 형식을 닮음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력변수로 필드를 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 반환타입이 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자명은 클래스명과 같아야함&lt;/p&gt;
&lt;pre id=&quot;code_1686792295027&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class HeroTest { // HeroTest클래스 메인메소드를 통해 전체 프로그램의 흐름을 결정
    public static void main(String[] args) {
        // ① 생성자 호출, 두 Hero 객체 만들기
        Hero ironMan = new Hero(&quot;아이언맨&quot;, 100, 120); // 메인메소드의 수행으로 생성자가 호출 / 반환받음
        Hero hulk = new Hero(&quot;헐크&quot;, 200, 80);

        // ② 객체 정보 출력
        System.out.println(ironMan.toStr()); // toStr()메소드 호출하여 반환받음
        System.out.println(hulk.toStr());
    }
}

class Hero { // Hero클래스 Hero객체를 위한 설계도로 동작
    String name; // 이름
    int power; // 힘
    int speed; // 속도

    Hero(String n, int p, int s) { // 생성자 정의 호출된 전달값이 입력변수에 저장되고 
        name = n; // 인스턴스변수 초기화됨 4행으로 반환
        power = p;
        speed = s;
    }

    String toStr() {    // 객체 정보를 문자열로 반환
        return String.format(&quot;Hero{name: %s, power: %d, speed: %d}&quot;, name,
                power, speed);
    }
}
&amp;gt;&amp;gt;&amp;gt; Hero{name: 아이언맨, power: 100, speed: 120}
    Hero{name: 헐크, power: 200, speed: 80}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디폴트 생성자(기본생성자) : 자동 적용되는 생성자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스에 아무런 생성자가 없는 경우에 추가되며, 입력변수가 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자 호출이 가능하도록 입력변수가 없는 생성자를 직접 추가해야 한다&lt;/p&gt;
&lt;pre id=&quot;code_1686792757396&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class DrinkTest {
    public static void main(String[] args) {
        Drink d1 = new Drink(); // 디폴트생성자 호출 
        Drink d2 = new Drink(&quot;박카스&quot;, 800); // 사용자 정의 생성자 호출
    }
}

class Drink {
    String name;
    int price;

    Drink(String n, int p) { // 입력변수가 있는 생성자
        name = n;
        price = p;
    }

    Drink() { // 입력변수가 없는 생성자
        name = &quot;이름 없음&quot;;
        price = 0;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자와 메소드의 차이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 반환타입의 작성 유무&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자는 생성 객체의 &lt;b&gt;인스턴스&lt;/b&gt;를 반환하기에 반환타입을 적지 않는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메소드는 여러 타입의 값을 반환하므로 적절한 반환 타입을 작성해야한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 호출 방법의 차이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자는 호출시 &lt;b&gt;new&lt;/b&gt; 키워드를 사용하는 반면 메소드는 그렇지 않다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 이름의 차이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자는 그 이름이 &lt;b&gt;클래스이름&lt;/b&gt;과 같아야 한다 반면 메소드는 자유롭게 작성가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 디폴트 생성자는 클래스에 명시적으로 정의되지 않은 경우에 자동으로 생성되는 생성자이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 한 클래스에 여러개의 생성자를 오버로딩하여 다양한 생성방식을 제공할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 생성자는 반환타입을 갖지 않는다 생성자의 목적은 객체의 초기화를 수행하는것이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4) 객체는 생성자호출을 통해 만들어진다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레퍼런스변수(참조변수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체를 가리키는 변수로 대상의 주소를 저장&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCv01G/btsjYwTFC2o/fJGTjcWNpl4cWLw0jGpWak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCv01G/btsjYwTFC2o/fJGTjcWNpl4cWLw0jGpWak/img.png&quot; data-alt=&quot;레퍼런스변수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCv01G/btsjYwTFC2o/fJGTjcWNpl4cWLw0jGpWak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCv01G%2FbtsjYwTFC2o%2FfJGTjcWNpl4cWLw0jGpWak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;559&quot; height=&quot;152&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레퍼런스변수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본변수와 차이점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 저장데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 레퍼런스 변수는 주소를 저장하여 대상을 간접적으로 가리킨다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기본변수는 값을 직접 가진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 원본 공유 여부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 레퍼런스변수는 하나의 대상 즉, 원본을 공유한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기본변수는 같은 값을 가지더라도 서로 다른 사본을 가진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 타입표기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 레퍼런스 타입은 관례상 대문자로 시작하고(Cat c;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기본타입은 소문자로 시작(배열은 예외)(char alphabet;)&lt;/p&gt;
&lt;pre id=&quot;code_1686793815186&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class AvengerTest {
    public static void main(String[] args) {
        Avenger thor = new Avenger(&quot;토르&quot;, 150); // 두 Avenger객체생성
        Avenger thanos = new Avenger(&quot;타노스&quot;, 160);
        thor.punch(thanos); // 인스턴스메소드 호출
        thor.punch(thanos);
        thanos.punch(thor);
    }
}

class Avenger {
    String name;
    int hp;

    Avenger(String s, int i) {
        name = s;
        hp = i;
    }

    void punch(Avenger enemy) { // 레퍼런스변수 thanos가 메소드로 전달되어 입력변수 enemy로 대입. thanos와 같은 객체를 가리키게됨
        System.out.printf(&quot;[%s]의 펀치!&quot;, name);
        enemy.hp -= 10;
        System.out.printf(&quot; -&amp;gt; %s의 체력: %d\n&quot;, enemy.name, enemy.hp);
    }
}
&amp;gt;&amp;gt;&amp;gt; [토르]의 펀치! -&amp;gt; 타노스의 체력: 150 // 토르=thor.name / 타노스=enemy.name / 150=enemy.hp
    [토르]의 펀치! -&amp;gt; 타노스의 체력: 140
    [타노스]의 펀치! -&amp;gt; 토르의 체력: 140&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;static 키워드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공유의 개념을 지닌 키워드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스의 필드와 메소드에 적용가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 필드에 사용되면 클래스변수 / 메소드에 사용되면 클래스메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인스턴스변수와 인스턴스메소드는 static이 적용되지 않은 필드와 메소드이다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z2HIQ/btsjYOmh0og/N04fE1Gl3WDJeW8HBGm551/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z2HIQ/btsjYOmh0og/N04fE1Gl3WDJeW8HBGm551/img.png&quot; data-alt=&quot;static 유무에 따른 필드와 메소드의 명칭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z2HIQ/btsjYOmh0og/N04fE1Gl3WDJeW8HBGm551/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ2HIQ%2FbtsjYOmh0og%2FN04fE1Gl3WDJeW8HBGm551%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;545&quot; height=&quot;123&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;static 유무에 따른 필드와 메소드의 명칭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스변수 : static이 적용된 필드. 객체들이 공유하는 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인스턴스변수가 객체내부에 존재하는 필드라면 클래스변수는 객체외부(클래스영역)에 존재하는 필드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스변수는 프로그램이 실행되기전 클래스를 불러오는 시점에 만들어짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스명과 닷 연산자를 통해 값을 가져오거나 변경가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스영역 : 클래스와 static변수등을 관리하는 메모리 공간으로 프로그램 수행 전 초기화됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힙 영역 : 객체를 관리하는 메모리공간으로 프로그램 수행 중 new키워드로 생성된 객체를 관리함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택영역 : 후입선출특징을 지닌 메모리공간으로 메소드관련정보(입력변수,지역변수 등)을 관리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQWJ4P/btsjXvOOTDp/U8w3BOlHAli0kyegS7nYD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQWJ4P/btsjXvOOTDp/U8w3BOlHAli0kyegS7nYD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQWJ4P/btsjXvOOTDp/U8w3BOlHAli0kyegS7nYD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQWJ4P%2FbtsjXvOOTDp%2FU8w3BOlHAli0kyegS7nYD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;317&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1686794509594&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;클래스변수를 사용해 Student객체의 총 수를 관리하는 프로그램
public class StudentTest {
    public static void main(String[] args) {
        Student park = new Student(2019122104, &quot;Park&quot;); // 3.이어서 메인메소드가 실행되고 7.레퍼런스변수 park은 생성객체를가리킴
        Student kim = new Student(2019206028, &quot;Kim&quot;); // 8.같은원리로 나머지 Student객체생성
        Student lee = new Student(2019153237, &quot;Lee&quot;);
        System.out.printf(&quot;Student 객체의 수: %d&quot;, Student.count); // 9.클래스 변숫값 가져오기
    }
}

class Student { // 1.프로그램이 실행되기 전 Student클래스가 컴퓨터메모리로 불러와지면서
    // 클래스변수(static fields)
    static int count = 0; // 2.클래스변수count가 0으로 초기화. 클래스 변수 선언 및 초기화 
    // 인스턴스 변수(non-static fields)
    int id;
    String name;

    // 생성자(constructor)
    Student(int _id, String _name) { // 4.Student객체를 생성
        Student.count++; // 5.클래스변수를 1만큼 증가
        id = _id; // 6.인스턴스변수 초기화 후 3행으로 돌아감
        name = _name;
    }
}
&amp;gt;&amp;gt;&amp;gt; Student 객체의 수: 3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 메소드 : static이 적용된 메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주체 객체 없이 수행될 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주로 간단한 기능 구현을 위해 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바에서 제공하는 Math.random(), Math.max(), Math.min() 등이 그 예&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c74JZS/btsjZ9Due5w/DAsEFnzJ2UhspVgQpDCWD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c74JZS/btsjZ9Due5w/DAsEFnzJ2UhspVgQpDCWD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c74JZS/btsjZ9Due5w/DAsEFnzJ2UhspVgQpDCWD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc74JZS%2FbtsjZ9Due5w%2FDAsEFnzJ2UhspVgQpDCWD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;530&quot; height=&quot;76&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1686795331485&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class MyMathTest {
    public static void main(String[] args) {
        System.out.println(MyMath.max(1.23, 3.45)); // 클래스 메소드 호출
        System.out.println(MyMath.min(5.43, 3.21)); // 객체생성없이 클래스명을 통해 진행됨 이는 static메소드(클래스메소드)이기에 가
    }
}

class MyMath {
    static double max(double a, double b) { // static으로 클래스 메소드 선언
        return (a &amp;gt; b) ? a : b;
    }

    static double min(double a, double b) {
        return (a &amp;lt; b) ? a : b;
    }
}
&amp;gt;&amp;gt;&amp;gt; 3.45
    3.21&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;207&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kC9ks/btsjXXdfh4E/fCVVPKPPJMwZVYsnj4SZFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kC9ks/btsjXXdfh4E/fCVVPKPPJMwZVYsnj4SZFK/img.png&quot; data-alt=&quot;클래스메소드 vs 인스턴스메소&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kC9ks/btsjXXdfh4E/fCVVPKPPJMwZVYsnj4SZFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkC9ks%2FbtsjXXdfh4E%2FfCVVPKPPJMwZVYsnj4SZFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;155&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;207&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클래스메소드 vs 인스턴스메소&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) &lt;b&gt;클래스변수&lt;/b&gt;(static Field)는 static 키워드가 적용된 필드로, 여러객체가 공유하는 변수이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) &lt;b&gt;인스턴스변수&lt;/b&gt;는 static 키워드가 적용되지 않은 필드로, 각 객체 내부에 변수로 존재한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 인스턴스메소드의 호출은 수행의 주체객체가 필요하지만, &lt;b&gt;클래스메소드&lt;/b&gt;는 주체 객체 없이 호출할 수 있다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근제한자 : 외부 접근을 제어하는 키워드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- public : 모든 클래스의 접근을 허용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- protected : 동일 패키지 또는 상속관계가 있는 클래스의 접근 허용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- default : 동일 패키지(폴더)에 존재하는 클래스의 접근 허용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- private : 모든 클래스의 접근을 거부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;private : 내부 접근만을 허용하고 일반적으로 필드에 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체 정보를 보호하고 지정된 메소드를 통해서만 그 상태를 변경시키기 위함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;public : 모든 외부접근을 허용하고 메소드에 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게터 메소드 : private필드를 외부로 반환하는 public메소드. get + 필드명의 형태로 작성되며 반환타입은 대상필드와 같음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세터 메소드 : private필드를 외부에서 변경하게하는 public메소드. set + 필드명의 형태로 작성되며 반환타입은 void&lt;/p&gt;
&lt;pre id=&quot;code_1686796217035&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class AccountTest {
    public static void main(String[] args) {
        Account acc = new Account(); // 1.Account객체생성
        // acc.balance = 1000; // ERROR // private필드는 외부에서 사용불가
        acc.setBalance(1000); // 2.세터메소드 호출
        System.out.printf(&quot;잔액: %d&quot;, acc.getBalance()); // 4.게터메소트 호출 6.문자열출력
    }
}

class Account {
    private int balance; // 잔액, private 적용

    // 게터 메소드 5.값 반환
    public int getBalance() {
        return balance;
    }

    // 세터 메소드 호출받고 3.인스턴스 변수값 변경
    public void setBalance(int b) {
        balance = b;
    }
}
&amp;gt;&amp;gt;&amp;gt; 잔액: 1000&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) &lt;b&gt;private&lt;/b&gt;접근제한자는 동일 클래스의 내부접근만을 허용하지만, &lt;b&gt;public&lt;/b&gt;접근제한자는 모든 외부접근을 허용한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) &lt;b&gt;정보은닉&lt;/b&gt;은 객체의 정보를 외부로부터 감추는 것을 의미한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) private필드는 게터메소드로 값을 가져올수있고, &lt;b&gt;세터&lt;/b&gt;메소드를 통해 값을 변경할수있다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로그램 개발을 위한 도구로 자바가 제공하는 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- System.out.printf(), Math.random(), Math.PI 등이 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드가 미리 준비되어 있어 더 편리한 프로그램을 작성을 도움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바 API는 패키지에 담겨 제공된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바코드의 묶음으로 일종의 폴더&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwr63n/btsjYpNSf9n/wgZT887PUQKSpnpp0s6RZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwr63n/btsjYpNSf9n/wgZT887PUQKSpnpp0s6RZK/img.png&quot; data-alt=&quot;패키지 예&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwr63n/btsjYpNSf9n/wgZT887PUQKSpnpp0s6RZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdwr63n%2FbtsjYpNSf9n%2FwgZT887PUQKSpnpp0s6RZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;195&quot; height=&quot;105&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;패키지 예&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1686796921653&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner; // API불러오기. java.util패키지의 Scanner클래스를 불러옴

public class UserInput {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in); // 스캐너 객체생성 System.in은 키보드 입력을 받기위한 전달값
        System.out.print(&quot;이름: &quot;);
        String name = input.next(); // 문자열 입력받기
        System.out.print(&quot;학번: &quot;);
        int number = input.nextInt(); // 정수입력받기
        System.out.print(&quot;학점: &quot;);
        double grade = input.nextDouble(); // 실수입력받기
        System.out.printf(&quot;[%s]님의 학번은 %d이며, 학점은 %.2f 입니다.&quot;, // 소수 셋째자리에서 반올림해서 둘째자리까지 표현
                name, number, grade);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 API문서 (&lt;a href=&quot;https://docs.oracle.com/en/java/&quot;&gt;Java Documentation - Get Started (oracle.com))&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바에서 제공하는 여러 API를 정리한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Scanner를 검색하면 Scanner 클래스의 개요와 필드,메소드,생성자 등의 사용법을 볼 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q. Scanner클래스의 두 메소드 next()와 nextLine()의 차이점을 설명하시오&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;next()&lt;/b&gt;메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 공백을 기준으로 입력을 구분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력된 문자열에서 &lt;b&gt;공백 이전까지의 문자열을 반환&lt;/b&gt;하고 공백 이후의 문자열은 입력버퍼에 남아있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &quot;Hello World&quot; 입력하면 &quot;Hello&quot;만 반환되고 / &quot;World&quot;는 입력버퍼에 남아있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;nextLine()&lt;/b&gt;메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 개행문자(new line)를 기준으로 입력을 구분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력된 &lt;b&gt;한줄전체를 반환&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &quot;Hello World&quot; 입력하면 전부 반환하고 입력버퍼에서 문자가 제거됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/35</guid>
      <comments>https://hongjunwoo.tistory.com/35#entry35comment</comments>
      <pubDate>Thu, 15 Jun 2023 11:51:53 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 예외처리, 모듈, Numpy, Pandas, Matplotlob</title>
      <link>https://hongjunwoo.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 예외처리구문 문법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 동작을 실행하였을 때 발생할 수 있는 에러(error)를 회피하기 위해, 해당 동작을 수행하지 않고 넘어갈 수 있는 방법을 '예외처리' 라고 한다. 예외처리를 수행하기 위한 구문을 완성하시오&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예외처리 방법 (try except 구문)&lt;/p&gt;
&lt;pre id=&quot;code_1686654639291&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try:
	실행할 명령문
except:
	pass # (예외처리 규정) 오류나면 넘기기&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 나만의 모듈 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서 모듈은 코드의 재사용을 위해 사용되는 개념이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈을 사용하면 유지보수와 디버깅이 쉬워진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나만의 모듈을 만들기 위해서는 다음과 같은 단계를 따를 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 모듈 파일 생성 : '.py'확장자를 사용해 모듈의 이름과 동일한 파일이름으로 생성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 모듈 코드 작성 : 모듈 파일 내에서 변수,함수,클래스 등을 정의하고 구현한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 모듈 임포트 : 다른 파이썬 스크립트에서 'import'문을 사용하여 모듈을 임포트한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4) 모듈의 요소 사용 : 모듈을 사용하려면 모듈이름뒤에 점'.'을 사용해 모듈의 요소에 접근한다&lt;/p&gt;
&lt;pre id=&quot;code_1686655734172&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;아래 코드와 같이 나만의 함수들을 나만의 모듈로 .py형태로 저장한다. 모듈이름과 파일이름은 uescsv.py로 하겠다

import csv

def opencsv(filename):
	f = open(filename, 'r')
    reader = csv.reader(f)
    output = []
    for i in reader:
    	output.append(i)
    f.close()
    return output
    
def writecsv(filename, a_list):
	f = open(filename, 'w', newline='')
    csvobject = csv.writer(f, delimiter=',')
    csvobject.writerows(a+list)
    f.close()&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686655939100&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;아래와 같이 내가만든 함수들을 모듈로 만들어 사용하려면 import로 나의 모듈을 불러오고
모듈이름 뒤에 점을 붙여 사용한다

import usecsv
output = usecsv.opencsv('a.csv')
print(output)
# 결과출력

b = # b출력
usecsv.writecsv('저장할이름', b)
# 저장됨&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. numpy, pandas, matplotlib 파이썬의 데이터를 분석하는 패키지(라이브러리)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넘파이(numpy) - 배열(array)을 다루는 도구. 배열계산, 반올림, 버리기 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판다스(pandas) - 데이터프레임(DataFrame)을 다루는 도구. DataFrame으로 데이터입력, 가공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맷플롯립(matplotlib) - 그래프를 그려주는 도구&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 숫자 표현 형식을 갖는 문자열을 숫자형으로 변환하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python에서는 내장함수 'int()'와 'float()'을 사용하여 숫자 표현 형식을 갖는 문자열을 숫자형으로 변환할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input() 함수로 입력받은 데이터는 숫자로 입력했어도 문자형이라서 꼭 숫자형으로 변환이 필요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x = int(x) 혹은 x = float(x)로 변환해준다&lt;/p&gt;
&lt;pre id=&quot;code_1686658010658&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a = &quot;123&quot; # 현재 a는 문자형으로 '123'이다

a = int(a) # a를 정수형으로 바꿔준다
type(a) # a가 현재 어떤타입인지 확인해줌
&amp;lt;class 'int'&amp;gt; # a가 정수형으로 바꼈다
a # a를 출력해보면
123 # 정수형 123으로 바꼈다

a= float(a) # a를 실수형으로 바꿔준다
type(a)
&amp;lt;class 'float'&amp;gt; # 실수형으로 잘 바뀌었다
a
123.0 # 실수형 123.0으로 바꼈다&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686670501919&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CSV파일 안의 문자를 숫자로 전환하기
a = '1,468,146' # 문자형에 콤마까지 있다

float(re.sub(',', '', j)) # re.sub()메서드로 콤마를 제거해주고 float으로 형변환한다
&amp;gt;&amp;gt;&amp;gt; 1468146.0

i = ['123!!', '151,767', '11,093', '', '!!!$%']
for j in i:
	try:
    		i[i.index(j)] = float(re.sub(',', '', j))
    except: # 모든 j를 실수형 변환 시도
    		pass # 오류나면 넘겨
i
&amp;gt;&amp;gt;&amp;gt; ['123!!', 151767.0, 11093.0, '', '!!!$%']

&amp;lt;결론&amp;gt;
리스트 내 숫자를 실수형으로 변환해주는 함수를 나만의 모듈에 추가

def switch(listName):
	for i in listName:
    	for j in i:
        	try:
            	i[i.index(j)] = float(re.sub(',', '', j)) # 중요한 부분
            except:
            	pass
	return listName&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1686666027181&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;numpy에서 배열의 원소 유형을 확인하는 .dtype 메서드
원소의 유형을 바꾸는 .astype() 메서드

d = np.array([2,3,4,5,6])
d.dtype # 배열의 원소유형 확인
&amp;gt;&amp;gt;&amp;gt; dtype('int32') # 정수형

d = d.astype('float64') # 실수형으로 바꾸기
d
&amp;gt;&amp;gt;&amp;gt; array([2.,3.,4.,5.,6.]) # 배열이 실수로 바뀜
d.dtype # 한번더 확인
&amp;gt;&amp;gt;&amp;gt; dtype('float64')&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 배열을 만드는 메서드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열(array)을 다루는 도구인 numpy를 설치해야한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령프롬프트에 pip install numpy 입력하여 설치한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 import로 numpy를 불러 사용한다&lt;/p&gt;
&lt;pre id=&quot;code_1686659053297&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np #numpy를 사용하기 쉽게 np로 정의한다

배열 정의 예시
a = np.array([[2,3],[5,2]])
a
&amp;gt;&amp;gt;&amp;gt; array([[2, 3],
           [5, 2]])
           
3X5 배열 생성
d = np.array([[1,2,3,4,5],[2,4,5,6,7],[5,7,8,9,9]])
d
&amp;gt;&amp;gt;&amp;gt; array([[1, 2, 3, 4, 5],
           [2, 4, 5, 6, 7],
           [5, 7, 8, 9, 9]])
           
np.zeros():원소가 모두 0으로 이뤄진 배열 생성
np.zeros((2,10)) #2X10 배열 생성
&amp;gt;&amp;gt;&amp;gt; array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
           
np.ones():원소가 모두 1로 이뤄진 배열 생성
np.ones((3,3))
&amp;gt;&amp;gt;&amp;gt; array([[1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.]])
           
np.arange():연속형 정수배열 생성
np.arange(2,10) # 2부터 10전까지 9까지. range함수를 생각
&amp;gt;&amp;gt;&amp;gt; array([2, 3, 4, 5, 6, 7, 8, 9])

np.transpose():열과 행을 바꾸기
a = np.array([[1,2,3],[4,5,6]]) # 2X3배열 생성
a                         
&amp;gt;&amp;gt;&amp;gt; array([[1, 2, 3], # 2X3배열에서
           [4, 5, 6]])
       
b = np.transpose(a)                         
b                         
&amp;gt;&amp;gt;&amp;gt; array([[1, 4], # 3X2배열로 바꼈다
           [2, 5],
           [3, 6]])
           
a = np.array([2,3,4,5,6])
a.shape # 배열 크기 알아내기
&amp;gt;&amp;gt;&amp;gt; (5, )

b = np.array([[1,2,3,4],[3,4,5,6]])
b
array([[1, 2, 3, 4],
       [3, 4, 5, 6]])
b.shape
(2, 4)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 배열의 원소를 추출하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱싱과 슬라이싱으로 추출할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[1][2]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[1,2]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d[1:, 2:]&lt;/p&gt;
&lt;pre id=&quot;code_1686660418505&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
이러한 3X5 배열이 있다
d = np.array([[1,2,3,4,5],[2,4,5,6,7],[5,7,8,9,9]])
d
&amp;gt;&amp;gt;&amp;gt; array([[1, 2, 3, 4, 5],
           [2, 4, 5, 6, 7],
           [5, 7, 8, 9, 9]])
       
두번째 줄의 5를 추출하고 싶다면
d[1][2] # 2번째줄의 3번째원소
&amp;gt;&amp;gt;&amp;gt; 5
d[1,2] # 위와 동일
&amp;gt;&amp;gt;&amp;gt; 5
두번째 줄의 [6,7]과, 세번째 줄의 [9,9]를 추출하고 싶다면
d[1:, 3:] # 2번째줄부터 배열의끝까지 &amp;amp; 4번째원소 이상으로 끝까지
&amp;gt;&amp;gt;&amp;gt; array([[6, 7],
           [9, 9]])&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 크기가 다른 배열의 사칙연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크기가 같은 배열의 사칙연산은 같은 자리의 원소끼리 사칙연산을 해준다&lt;/p&gt;
&lt;pre id=&quot;code_1686661669939&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;아래의 네개의 크기가 다른 배열이 있다
arr1 = np.array([[2,3,4],[6,7,8]]) #2X3
arr2 = np.array([100,200,300]) #1X3
arr3 = np.array([1,2,3,4,5,6,7,8,9,10]) #1X10
arr4 = np.array([[9],[3]]) #2X1

arr1 + arr2 # 2X3과 1X3의 연산 행의 크기가 같아 연산가능
&amp;gt;&amp;gt;&amp;gt; array([[102, 203, 304],
           [106, 207, 308]])
arr1 + arr3    
&amp;gt;&amp;gt;&amp;gt; 에러! # 행과 열중 한쪽이라도 크기가 같아야 연산가능&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 데이터프레임의 행과 열의 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DataFrame은 데이터를 쉽게 가공하기 위한 틀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas의 DataFrame() 함수를 사용하여 딕셔너리형 자료를 데이터프레임으로 변환가능하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;딕셔너리형 자료&lt;/b&gt;란 '&lt;b&gt;Key값 : Values&lt;/b&gt;' 형태의 자료형인데 보기에 깔끔하지 않다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DataFrame으로 변환을 하기 위해서 df = &lt;b&gt;pd.DataFrame&lt;/b&gt;()메서드를 입력해준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;행&lt;/b&gt; : 정보를 담고있는 &lt;b&gt;데이터 샘플의 개수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열 : 특정 속성. 'name'열은 학생의 이름을 나타낼 수 있다&lt;/p&gt;
&lt;pre id=&quot;code_1686664527171&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd # pandas를 사용하기위해 import해준다

a = {'name' : ['Mark','Jane','Chris','Ryan'], # key값:values형태의 딕셔너리형 자료
        'age' : [33,32,44,42],
        'score' : [91.3,83.4,77.5,87.7]}
                
df = pd.DataFrame(a) # pd.DataFrame()함수로 데이터프레임으로 변환해준다 대소문자 구별필수 df로 간략하겠다
df
&amp;gt;&amp;gt;&amp;gt;    name  age  score
   0   Mark   33   91.3
   1   Jane   32   83.4
   2  Chris   44   77.5
   3   Ryan   42   87.7
   
df.sum() # 특정값들의 합계를 구하기
&amp;gt;&amp;gt;&amp;gt; name     MarkJaneChrisRyan
    age                    151
    score                339.9
    dtype: object   

df.mean() # 특정값들의 평균 구하기
&amp;gt;&amp;gt;&amp;gt; 에러 # 문자열의 평균을 구할수없다

df
&amp;gt;&amp;gt;&amp;gt;    name  age  score # Key값 예)age열=33,32,44,42
   0   Mark   33   91.3
   1   Jane   32   83.4
   2  Chris   44   77.5
   3   Ryan   42   87.7
   
df.age # age열만 추출하고 싶을때 쓰는 방법1
df['age'] # 방법2
&amp;gt;&amp;gt;&amp;gt; 0    33
    1    32
    2    44
    3    42
    Name: age, dtype: int64
    
df.age.sum() # age열의 합계
&amp;gt;&amp;gt;&amp;gt; 151
df.age.mean() # age열의 평균
&amp;gt;&amp;gt;&amp;gt; 37.75
df.age.median() # age열의 중앙값 - 5명이 있다면 중간의 3등의값이고 4명이 있다면 2,3등의 평균
&amp;gt;&amp;gt;&amp;gt; 37.5

df.describe() # 통계랑 요약 출력

df.groupby(그룹을 나누는 변수).연산 # 그룹을 나누어 연산 진행&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 데이터프레임에서 조건을 통한 부분 추출&lt;/p&gt;
&lt;pre id=&quot;code_1686668168853&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd # 판다스 불러오고
import os, re # os,re모듈 불러오고
os.chdir('폴더위치') # 폴더위치 설정하고
df = pd.read_csv('파일이름') # pd.read_csv()함수를 사용하면 자동으로 데이터프레임으로 읽어온다

df
&amp;gt;&amp;gt;&amp;gt; 처음 다섯개의 행, 끝의 다섯개의 행 출력

len(df) # 데이터 개수확인(행 개수)

df.head() # 맨앞의 5개 행 출력
df.tail() # 맨뒤의 5개 행 출력

df.지역 # 원하는 열 전체 자료 출력 방법1
df['지역'] # 방법2

df[df.면적&amp;gt;130] # 면적이 130초과인데 모든열 출력
df.가격[df.면적&amp;gt;130] # 면적이 130 초과인데 '가격'열만 출력

df.가격[(df.면적&amp;gt;130)&amp;amp;(df.가격&amp;lt;15000)] # 면적이 130초과이며&amp;amp;(AND),가격이 15000 미만인 데이터의 '가격'만 출력
df.가격[(df.면적&amp;gt;130)|(df.가격&amp;lt;15000)] # 면적이 130초과이거나|(OR),가격이 15000 미만인 데이터의 '가격'만 출력

# 보다 정교하게 조건넣기 중요하지않음
df.loc[:10,['아파트','가격']] # df.loc[원하는행의조건,원하는열의조건] 10번째 행까지 아파트와 가격출력
df.loc[:10,['아파트','가격']][df.가격&amp;gt;40000] # 4억원 초과옵션 추가

df.지역.str.find('강릉') # df.검색할열.str.find('찾는문자열') 지역열에서 '강릉'이 들어간 데이터 출력. 찾는문자열이 없다면 -1반환&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. Matplotlib 그래프를 만들어주는 패키지&lt;/p&gt;
&lt;pre id=&quot;code_1686670979035&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import matplotlib.pyplot as plt # 사용방법

x=[1,4,9,16,25,36,49,64]
plt.plot(x) # 그래프생성
&amp;gt;&amp;gt;&amp;gt; [&amp;lt;matplotlib.lines.Line2D object at 0x00000279587371F0&amp;gt;]
plt.show() # 그래프출력

plt.plot(x, color = 'r') # plt.plot(그래프자료,색) 색깔과모양 수정가능

plt.plot(x, 'or') # r=red, o=점

x
[1, 4, 9, 16, 25, 36, 49, 64]
y = [i for i in range(1,9)] # y축 변경
y
[1, 2, 3, 4, 5, 6, 7, 8]
plt.plot(x,y)

plt.xlabel('hi') # x축 이름설정           

plt.ylabel('bye') # y축 이름설정           

plt.title('Hello World') # 제목설정&lt;/code&gt;&lt;/pre&gt;</description>
      <category>전공공부/파이썬 (Python)</category>
      <category>파이썬</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/34</guid>
      <comments>https://hongjunwoo.tistory.com/34#entry34comment</comments>
      <pubDate>Wed, 14 Jun 2023 00:51:04 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 객체, 함수, 스코프, 프로토타입</title>
      <link>https://hongjunwoo.tistory.com/33</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;객체 : 하나의 개체를 표현하기 위해 복수의 요소 정보를 보유 (자체가 하나의 개체)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로퍼티 + 메소드로 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로퍼티 : 객체(개체)의 상태나 특성을 나타내는 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 입력폼을 나타내는 Form객체에서 폼의이름, 폼에 포함된 텍스트박스나 선택박스 등의 요소, 폼에 의한 송신장소 등이 프로퍼티&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메소드 : 객체(개체)를 조작하기 위한 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) Form객체에서 폼의 정보를 서버에 송신하기, 폼의 내용을 지우기 등의 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트의 객체 : 숫자,문자열,boolean,null,undefined같은 기본타입을 제외하고 모두 객체&lt;/p&gt;
&lt;pre id=&quot;code_1686491982367&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;객체 만드는 방법
1. Object() 생성자 함수 이용
- 빈 객체를 만들어 나중에 프로퍼티와 메소드를 추가함
var foo = new Object();

2. 객체 리터럴 방식 이용
- { } 이용하여 생성, { } 안에 프로퍼티:프로퍼티값 의 형태로 표기
var foo = {
    name:'foo'
    age:30
};

3. 생성자(constructor)함수 이용
- 함수에 new연산자를 붙여서 호출. 함수는 객체를 초기화 하는 역할 수행
- 함수 이름의 첫문자를 대문자로 표기
var Person = function(name) {
    this.name = name;
};

var foo = new Person('foo');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-내장형 객체 (Built-in Object) : js에 미리 내장되어 있는 객체. js가 동작하는 모든 환경에서 이용 가능하며 특별한 선언이나 정의를 하지않고 바로 이용 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) Array, Date, String, Number, Error, RegExp&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 브라우저 객체 : 특정의 환경(브라우저 상)에서만 동작하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 정적프로퍼티/메소드 : 예외적으로 객체를 생성하지 않고 바로 이용이 가능한 프로퍼티/메소드&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 데이터를 취급하기 위한 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. String 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 문자열 형의 값을 취급하기 위한 객체. 문자열의 유출이나 가공,검색 등을 행하기 위한 기능 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var str = '안녕하세요!';&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Number 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수치형의 값을 취급하기 위한 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var num = 123;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Math 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수학 연산의 기능을 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. &lt;b&gt;Array&lt;/b&gt; 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 배열형의 값을취급하기 위한 객체. 배열에 대한 요소의 추가,삭제,결합,정렬 등을 행하기 위한 기능을 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var ary = ['사토', '다카에', '나가타'];&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgBMHi/btsjGiuHpCZ/xGgZmyehZAuF1q86SBtMKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgBMHi/btsjGiuHpCZ/xGgZmyehZAuF1q86SBtMKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgBMHi/btsjGiuHpCZ/xGgZmyehZAuF1q86SBtMKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgBMHi%2FbtsjGiuHpCZ%2FxGgZmyehZAuF1q86SBtMKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;432&quot; height=&quot;348&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1686566675417&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var ary1 = ['Sato', 'Takae', 'Osada', 'Hio', 'Saitoh'];
var ary2 = ['Yabuki', 'Aoki', 'Moriyama', 'Yamada'];

console.log(ary1.concat(ary2)); // ary2를 ary1에 연결
// Sato,Takae,Osada,Hio,Saitoh,Yabuki,Aoki,Moriyama,Yamada

console.log(ary1.join('／')); // 배열내의 요소를 '/'로 연결
// Sato／Takae／Osada／Hio／Saitoh

console.log(ary1.slice(1)); // 가장 처음 요소를 빼냄
// [ 'Takae', 'Osada', 'Hio', 'Saitoh' ]

console.log(ary1.pop()); // 배열 끝의 요소를 취득하여 삭제
// Saitoh (삭제한요소)
console.log(ary1); // 삭제한 후의 배열
// [ 'Sato', 'Takae', 'Osada', 'Hio' ]

console.log(ary1.push('Kondo')); // 배열 끝에 요소추가
// 5 (추가 후의 요소 수)
console.log(ary1);
// [ 'Sato', 'Takae', 'Osada', 'Hio', 'Kondo' ]

console.log(ary1.shift()); // 배열 선두의 요소를 취득하여 삭제
// Sato (삭제한요소)
console.log(ary1);
// [ 'Takae', 'Osada', 'Hio', 'Kondo' ]

console.log(ary1.unshift('Ozawa', 'Kuge')); // 배열 선두에 지정요소 추가
// 6 (추가 후의 요소 수)
console.log(ary1);
// [ 'Ozawa', 'Kuge', 'Takae', 'Osada', 'Hio', 'Kondo' ]

console.log(ary1.reverse()); // 역순으로 정렬
// [ 'Kondo', 'Hio', 'Osada', 'Takae', 'Kuge', 'Ozawa' ]

console.log(ary1.sort()); // 오름차순으로 정렬(알파벳순)
// [ 'Hio', 'Kondo', 'Kuge', 'Osada', 'Ozawa', 'Takae' ]

console.log(ary1.length); // 배열의 사이즈
// 6

console.log(ary1.toString()); // 문자열로 치환
// Hio,Kondo,Kuge,Osada,Ozawa,Takae&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Date 객체 : 날짜,시각 데이터 조작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 반드시 생성자 사용. 문자열이나 배열등과 같이 리터럴 표현이 존재하지 않음&lt;/p&gt;
&lt;pre id=&quot;code_1686570081674&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var d = new Date(); 
// 디폴트의 Date 객체 생성
// Date 객체는 디폴트로 생성되는 시점의 시스템 날짜와 시각을 세트

var d = new Date(&amp;lsquo;2010/12/04&amp;rsquo;);
// 날짜 문자열 값을 이용하여 Date 객체를 생성

var d = new Date(2010,11, 4, 23, 55, 30, 500);
// 년월일/시분초/밀리초
// 시분초, 밀리초는 생략가능
// 월 지정이 1~12가 아니라 0~11임 주의할것

var d = new Date(1217862000000);
// 1970/01/01 00:00:00부터의 경과 밀리초(타임스탬프값)로 지정하는 방법&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Object 객체 : 모든 객체의 모형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 객체의 공통적인 성질/기능을 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 객체의 기본 객체. 모든 객체의 프로토타입 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 멤버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. toString/valueOf 메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;toString 메소드 : 객체의 문자열 표현을 취득&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;valueOf 메소드 : 객체의 기본형 표현을 취득. 문자열 이외의 값이 반환되는 것을 기대하며 사용됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. constructor 프로퍼티 : 인스턴스화에서 사용되는 생성자(읽기 전용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 참조형(객체형)의 변수를 식별&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인스턴스의 생성에 사용된 생성자(Function 객체)를 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- instanceof 와 동일한 기능제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;typeof 연산자 : 기본형을 식별하는 것만이 가능. Object, Array, Date 객체에 대해 사용. 'object'로 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;익명 객체 : (Object 객체 생성) 객체 공통의 프로퍼티/메소드 이외에 어떠한 데이터도 갖고 있지 않는 빈 객체. 차후에 데이터(프로퍼티)를 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 한정된 장소에서 일시적으로 데이터를 사용할 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 작은 규모의 구조 데이터를 주고받을 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수로 복수의 값을 돌려주고 싶은 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 간단하게 코드를 기술할 수 있다&lt;/p&gt;
&lt;pre id=&quot;code_1686571091286&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var obj = new Object();
obj.name = &amp;ldquo;토그지로&amp;rdquo;;
obj.birth = new Date(2005, 7, 15);
obj.old = 5&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수(function) : 반복해서 사용하는 코드를 하나로 정리하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 주어진 입력(파라미터)에 근거해 어떠한 처리를 실시하여 그 결과를 돌려주는 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 정의 함수 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Function 명령으로 정의하기&lt;/p&gt;
&lt;pre id=&quot;code_1686579195140&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function 함수명([인수 1[, 인수2[, ... ]]) {
    함수 안에서 실행되는 임의의 명령(군)
    [return 반환값;]
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수의 동작을 결정하기 위한 파라미터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 호출원으로부터 지정된 값을 받아들이기 위한 변수를 콤마 단락으로 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수 내부에서만 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수가 처리를 한 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수의 말미에 return 명령을 기술해 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명([인수, ...]);&lt;/p&gt;
&lt;pre id=&quot;code_1686579652028&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function triangle(base, height) {
    return base * height / 2;
    }
    console.log('삼각형의 면적：' + triangle(5,2));
// 삼각형의 면적 : 5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 함수 리터럴로 정의하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; function(...){...}로 이름없는 함수를 정의한 다음 변수에 대입. 익명함수&lt;/p&gt;
&lt;pre id=&quot;code_1686624559543&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var triangle = function(base, height) {
    return base * height / 2;
    };
    console.log('삼각형의 면적：' + triangle(5,2));
// 삼각형의 면적 : 5&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수정의의 네가지 주의점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. return명령의 중간에 개행하지 말것 : return명령 중간에 라인 바꾸지 말것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 함수는 데이터형의 일종임. 함수는 객체임 함수 리터럴로 정의된 변수는 값의 수정이 가능함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. function 명령은 정적인 구조 선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 함수 리터럴 정의문은 실행시에 판단됨. 호출원의 코드보다 먼저 기술해야 함&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;글로벌 스코프&lt;/b&gt;(변수) : 스크립트 전체에서 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 글로벌 스코프를 갖는 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수의 바깥에서 선언한 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로컬 스코프&lt;/b&gt;(변수) : 정의된 함수 안에서만 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 로컬 스코프를 갖는 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수의 안에서 선언한 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수의 선두에 선언해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var를 사용하지 않은 변수는 모두 글로벌 변수가 된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;변수 선언시 모두 var를 사용해야 한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxysN3/btsjG0HtCCP/0Rfm6J2BBcidbKGc1QSXUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxysN3/btsjG0HtCCP/0Rfm6J2BBcidbKGc1QSXUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxysN3/btsjG0HtCCP/0Rfm6J2BBcidbKGc1QSXUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxysN3%2FbtsjG0HtCCP%2F0Rfm6J2BBcidbKGc1QSXUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;226&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1686625456837&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var scope = 'Global Variable'; // 글로벌
function getValue() {
	var scope = 'Local Variable'; // 로컬
	return scope;
}
console.log(getValue()); // Local Variable
console.log(scope); // Global Variable&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인수의 스코프&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인수는 기본적으로 로컬변수이다&lt;/p&gt;
&lt;pre id=&quot;code_1686626386818&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;기본형(call by value)
var value = 10;
function decrementValue(value) {
    value--;
    return value;
}
console.log(decrementValue(100)); // 99
console.log(value); // 10&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PHxgt/btsjAw1OM4T/gsXuzUBP6sO6OdsI6fOONk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PHxgt/btsjAw1OM4T/gsXuzUBP6sO6OdsI6fOONk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PHxgt/btsjAw1OM4T/gsXuzUBP6sO6OdsI6fOONk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPHxgt%2FbtsjAw1OM4T%2FgsXuzUBP6sO6OdsI6fOONk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;413&quot; height=&quot;223&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686626572663&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;참조형(call by reference)
var value = [1, 2, 4, 8, 16];
function deleteElement(value) {
    value.pop(); // 마지막 요소를 삭제
    return value;
}
console.log(deleteElement(value)); // 1,2,4,8
console.log(value); // 1,2,4,8&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpG7MU/btsjH1lD178/NhlUBPkKasSXyYSbysBjK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpG7MU/btsjH1lD178/NhlUBPkKasSXyYSbysBjK0/img.png&quot; data-alt=&quot;동일 어드레스를 참조하기 때문 로컬변수의 변경을 글로벌 변수에도 반영됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpG7MU/btsjH1lD178/NhlUBPkKasSXyYSbysBjK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpG7MU%2FbtsjH1lD178%2FNhlUBPkKasSXyYSbysBjK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;434&quot; height=&quot;211&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동일 어드레스를 참조하기 때문 로컬변수의 변경을 글로벌 변수에도 반영됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록레벨의 스코프는 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 리터럴에서 사용한 변수는 로컬변수를 사용&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고계함수 (high-order function)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수를 인수,반환값으로 취급하는 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 큰 범위의 기능만을 정의하고 상세한 기능은 사용자가 결정할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1686627529898&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 고계 함수 arrayWalk를 정의
function arrayWalk(data, f) {
            for (var key in data) {
                f(key, data[key]);
            }
}

var result= 0; // 결과값을 격납하기 위한 글로벌 변수
function sumElement(key, value) { // 배열을 처리하기 위한 사용자정의 함수
            result += value; // 주어진 배열 요소로 변수 result를 가산
}

var ary = [1, 2, 4, 8, 16];
arrayWalk(ary, sumElement);
console.log('합계：' + result); //31&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l9lpC/btsjJbuMX0u/0Cvlp4TaE4i1rH8LRpgLB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l9lpC/btsjJbuMX0u/0Cvlp4TaE4i1rH8LRpgLB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l9lpC/btsjJbuMX0u/0Cvlp4TaE4i1rH8LRpgLB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl9lpC%2FbtsjJbuMX0u%2F0Cvlp4TaE4i1rH8LRpgLB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;546&quot; height=&quot;393&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일회용 함수 : 고계함수의 인수함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 현재 장소에만 사용되는 일회용 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일회용 함수는 익명함수로 정의 (코드의 간략화, 함수이름의 중복피하기)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Call 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수 호출이 있을 때마다 내부적으로 자동 생성되는 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 함수 내에서 정의된 로컬 변수를 관리하기 위한 편의적인 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스코프 체인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Call객체를 생성 순서대로 연결한 리스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수 스코프&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스코프 체인의 선두에 위치하는 객체부터 순서대로 프로퍼티를 검색하여 일치하는 프로퍼티가 처음 발견되는 곳에서의 값을 채택함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHFsQ8/btsjJd0vVZs/mo7dLxIoG9cedzfdwZKP81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHFsQ8/btsjJd0vVZs/mo7dLxIoG9cedzfdwZKP81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHFsQ8/btsjJd0vVZs/mo7dLxIoG9cedzfdwZKP81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHFsQ8%2FbtsjJd0vVZs%2Fmo7dLxIoG9cedzfdwZKP81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;477&quot; height=&quot;262&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클로저(Closuuer)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 로컬 변수를 참조하고 있는 함수내의 함수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 호출 함수가 종료되어도 클로저 함수가 참조하는 변수는 계속 유지됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 통상적인 로컬 변수&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;javascript의 객체지향 특징&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 프로토타입(protorype) 기반으로 객체 유지 - 클래스 지원 가능함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토타입 : 어떤 객체의 원본이 되는 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 생성자 함수로 초기화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자(constructor) : new연산자에 의해서 객체를 생성하는 함수객체. 객체를 생성할 때 객체의 초기화 처리를 기술하기 위한 특수한 메소드. 생성자의 이름은 대문자로 시작하며 생성자가 아닌 함수와 구별된다.&lt;/p&gt;
&lt;pre id=&quot;code_1686630013907&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Member = function(firstName, lastName){
        this.firstName = firstName;
        this.lastName = lastName;
        this.getName = function(){
                    return this.lastName + ' ' + this.firstName;
        }
};
var mem = new Member('요시히로', '야마다＇);
console.log(mem.getName()); // 야마다 요시히로&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- this :생성자에 의해서 생성되는 객체. 변수를 지정함으로써 인스턴스의 프로퍼티 설정 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로퍼티에 함수 객체(함수 리터럴)를 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;동적으로 메소드 추가&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686630341999&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Member = function(firstName, lastName){
        this.firstName = firstName;
        this.lastName = lastName;
};
var mem = new Member('요시히로', '야마다');
mem.getName = function(){
        return this.lastName + ' ' + this.firstName;
}
console.log(mem.getName()); // 야마다 요시히로&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 생성 후 나중에 메소드 추가 가능함. 위는 객체 생성 후 getName 메소드 추가&lt;/p&gt;
&lt;pre id=&quot;code_1686630878991&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Member = function(firstName, lastName){
        this.firstName = firstName;
        this.lastName = lastName;
};
var mem = new Member('요시히로', '야마다');
mem.getName = function(){
        return this.lastName + ' ' + this.firstName;
}
console.log(mem.getName()); // 야마다 요시히로

var mem2 = new Member('나미', '가케다니');
console.log(mem2.getName()); // 에러!!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-프로퍼티or메소드의 추가는 해당 객체에만 추가됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mem2에는 해당 메소드가 추가 안됨&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토타입 객체 (prototype object)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토타입 : 자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;_proto_ 프로퍼티&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ECMAScript 명세 : 모든 객체는 자신의 프로토타입을 가리키는 [[Prototype]]라는 숨겨진 프로퍼티를 가진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 크롬 : _proto_ / 부모 객체를 가리키는 프로퍼티&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;function object : 함수도 객체임. 함수 객체만의 고유 프로퍼티가 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;portotype 프로퍼티&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [[prototype]](_proto_) 와는 다른 프로퍼티임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_proto_ : 객체 입장에서 자신의 부모 역할을 하는 프로토타입 객체를 가리킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prototype : 이 함수가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모 역할을 하는 프로토타입 객체를 가리킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;메소드는 프로토타입 객체에 추가한다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성자 함수에 메소드 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메소드의 수에 비례하여 메모리를 소비함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자는 객체를 생성할 때 마다 각 메소드를 위한 메모리를 확보함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;모든 속성의 추가와 삭제는 객체단위로 이루어진다&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686633161238&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Member = function(firstName, lastName){
        this.firstName = firstName;
        this.lastName = lastName;
};
Member.prototype.getName = function(){
        return this.lastName + ' ' + this.firstName;
};
var mem = new Member('요시히로', '야마다');
console.log(mem.getName()); // 야마다 요시히로&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토타입 객체에 메소드 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자의 prototype 객체에 대하여 암묵적인 참조를 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- prototype 객체에 추가된 메소드를 사용할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ0xOU/btsjJbI49dC/dT5UOHIpO5KK0B4b85NKo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ0xOU/btsjJbI49dC/dT5UOHIpO5KK0B4b85NKo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ0xOU/btsjJbI49dC/dT5UOHIpO5KK0B4b85NKo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ0xOU%2FbtsjJbI49dC%2FdT5UOHIpO5KK0B4b85NKo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;506&quot; height=&quot;220&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토타입 객체를 사용하는 이점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 메모리 사용량 절감&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로토타입 객체의 내용은 객체로부터 암묵적으로 참조만 될 뿐 객체에 복사되는 것은 아님&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로퍼티의 추가나 변경을 객체가 실시간으로 인식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로퍼티의 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로토타입 객체의 사용 &amp;gt; 값을 참조할 때 뿐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 객체에 대한 값의 설정은 해당 객체에 대하여 이루어짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로퍼티의 선언 : 생성자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메소드의 선언 : 프로토타입&lt;/p&gt;
&lt;pre id=&quot;code_1686633656441&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Member = function(){ };
Member.prototype.sex = '남자';

var mem1 = new Member();
var mem2 = new Member();
console.log(mem1.sex + '|' + mem2.sex); // 남자 | 남자
mem2.sex = '여자';
console.log(mem1.sex + '|' + mem2.sex); // 남자 | 여자&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로퍼티의 삭제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로퍼티의 삭제는 객체 단위로 이루어짐&lt;/p&gt;
&lt;pre id=&quot;code_1686633720200&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Member = function(){ };

Member.prototype.sex = '남자';

var mem1 = new Member();
var mem2 = new Member();
console.log(mem1.sex + '|' + mem2.sex); // 남자 | 남자
mem2.sex = '여자';
console.log(mem1.sex + '|' + mem2.sex); // 남자 | 여자
delete mem1.sex
delete mem2.sex
console.log(mem1.sex + '|' + mem2.sex); // 남자 | 남자&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속 : 베이스가 되는 객체(클래스)의 기능을 계승하여 새로운 클래스를 정의하는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로토타입 체인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- prototype 프로퍼티에 객체를 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 암묵적인 참조를 이용하여 상속관계를 가질 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1686634021804&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Animal = function() {}

Animal.prototype = {
            walk : function() {console.log('종종'); }
};

var Dog = function() {};
Dog.prototype = new Animal(); // 중요

Dog.prototype.bark = function() {console.log('멍멍'); }

var d = new Dog();
d.walk(); // 종종
d.bark(); // 멍멍&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dc5FTi/btsjGZbHHHG/xwmOKPkHuayvqKDvKHw4Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dc5FTi/btsjGZbHHHG/xwmOKPkHuayvqKDvKHw4Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dc5FTi/btsjGZbHHHG/xwmOKPkHuayvqKDvKHw4Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdc5FTi%2FbtsjGZbHHHG%2FxwmOKPkHuayvqKDvKHw4Uk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;537&quot; height=&quot;340&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속 관계는 동적으로 변경 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토타입 체인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자 프로토타입은 동적으로 변경 가능함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변경 후에 생성된 객체는 변경된 프로토타입 체인을 만듬&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변경 전에 생성된 객체는 생성될 때 프로토타입 체인을 유지&lt;/p&gt;
&lt;pre id=&quot;code_1686634657685&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Animal = function() {}

Animal.prototype = {
    walk : function() {console.log('종종...'); }
};

var SuperAnimal = function() {}
SuperAnimal.prototype = {
    walk : function() {console.log('다다다닷！'); }
};

var Dog = function() {};
Dog.prototype = new Animal(); // Animal 객체를 계승
var d1 = new Dog(); 
d1.walk(); // 종종... 

Dog.prototype = new SuperAnimal(); // SuperAnimal 객체를 계승
var d2 = new Dog(); 
d2.walk(); // 다다다닷! 
d1.walk(); // 종종... &amp;lt;여기에 뭐가 들어가는지 아는것이 중요&lt;/code&gt;&lt;/pre&gt;</description>
      <category>전공공부/자바스크립트 (JavaScript)</category>
      <category>자바스크립트</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/33</guid>
      <comments>https://hongjunwoo.tistory.com/33#entry33comment</comments>
      <pubDate>Tue, 13 Jun 2023 14:39:57 +0900</pubDate>
    </item>
    <item>
      <title>[Git] branch, merge, pull request, fork, rebase, fetch</title>
      <link>https://hongjunwoo.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Branch (브랜치) : 두 명이 동시에 버전 관리를 하기 위해 특정 기준에서 줄기를 나누어 작업할 수 있는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [master]브랜치 : Git에서 제공하는 기본적인 브랜치. 새로운 커밋을 추가할 때마다 master브랜치의 포인터가 최신 커밋을 가리킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 최신커밋에서 [새로운] 브랜치를 만들경우 새로운 포인터가 커밋을 가리키고, 새로운 브랜치가 새로운 커밋을 만들면 master브랜치는 따라오지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- master브랜치가 새로운 브랜치처럼 커밋을 만들면 거기서부터 master브랜치와 새로운 브랜치는 다른 커밋을 가리키게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-[Head]포인터 : 현재 작업하고 있는 커밋을 가리키는 포인터. 브랜치 사이를 넘나들며 작업할 수 있도록 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;333&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mDqGd/btsfeAMgzQl/JkkVVjQynScUyWictQTG6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mDqGd/btsfeAMgzQl/JkkVVjQynScUyWictQTG6K/img.png&quot; data-alt=&quot;고양이 브랜치 == 새로운 브랜치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mDqGd/btsfeAMgzQl/JkkVVjQynScUyWictQTG6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmDqGd%2FbtsfeAMgzQl%2FJkkVVjQynScUyWictQTG6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;283&quot; height=&quot;226&quot; data-origin-width=&quot;333&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;고양이 브랜치 == 새로운 브랜치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 브랜치 만들기 규칙 : 하나의 브랜치에는 한 사람만 작업하는 것이 바람직하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. [master]브랜치에는 직접 커밋을 올리지 않는다(동시작업 시 꼬일 수 있음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 기능 개발을 하기 전에 [master]브랜치를 기준으로 새로운 브랜치를 만든다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 브랜치 이름은 [feature/기능이름]형식으로 하고 한 명만 커밋을 올린다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. [feature/기능이름]브랜치에서 기능 개발이 끝나면 [master]브랜치에 이를 합친다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 브랜치 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 고양이가 detail-page 브랜치 만들기 위해 [브랜치] 아이콘 클릭해 'feature/detail-page' 새 브랜치 체크아웃 선택하고 브랜치생성함 (checkout은 브랜치 이동 명령) 가장 최근 커밋을 가리키고 있음. 왼쪽 하단 [브랜치] - [feature] - [detail-page]표시됨(브랜치 이름에 '/' 삽입 시 폴더처럼 구분됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. VS Code에서 iTshirt-cat폴더에 'detail-page.md' 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 소스트리에서 커밋 메시지 작성 후 커밋 - 예시로 디테일 페이지 추가 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. History 그래프 확인하면 feature/detail-page브랜치에 커밋 추가된것 확인할수있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xsgpU/btsfdb7xp68/xqn9cDassgFKPnzuTmma81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xsgpU/btsfdb7xp68/xqn9cDassgFKPnzuTmma81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xsgpU/btsfdb7xp68/xqn9cDassgFKPnzuTmma81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxsgpU%2Fbtsfdb7xp68%2Fxqn9cDassgFKPnzuTmma81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;416&quot; height=&quot;120&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. vs code에서 feature-list.md 파일 수정 - 예시로 3.디테일 페이지 보여주기 텍스트 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 소스트리에서 커밋 [~에 바뀐 내용 즉시 푸시]체크박스 체크(커밋과 동시에 원격저장소에 푸시가 된다) - 예시로 기능 명세 3번에 추가 커밋메시지 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 히스토리 그래프 확인하면 방금 커밋에 로컬저장소를 나타내는 feature/detail-page와, 원격저장소를 나타내는 origin/feature/detail-page 꼬리표가 붙음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj6EB9/btsfaIyfKWW/dkzcm8lSfCmyXpTneIF971/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj6EB9/btsfaIyfKWW/dkzcm8lSfCmyXpTneIF971/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj6EB9/btsfaIyfKWW/dkzcm8lSfCmyXpTneIF971/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj6EB9%2FbtsfaIyfKWW%2Fdkzcm8lSfCmyXpTneIF971%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;125&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. Github의 원격저장소에서 [feature/detail-page]브랜치 업로드를 확인한다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;checkout : 브랜치 이동 명령&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 문어가 작성을 위해 현재 브랜치를 [master]브랜치를 더블클릭해 이동한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. [master]브랜치인지 확인 후 [feature/cart]새 브랜치를 생성한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. vs code에서 iTshirt-cat 폴더의 feature-list.md 파일을 열면 '3.디테일 페이지 보여주기' 텍스트는 없다.(이것은 고양이가 만든 feature/detail-page 브랜치에 있기때문) 대신 '3.장바구니 담기' 텍스트입력(이제 충돌이 일어난다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 새파일 'cart.md' 추가 작성 내용은 '장바구니 담기' 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 소스트리에서 방금 수정한 feature-list.md와 cart.md 커밋. 커밋메시지는 '장바구니 담기 기능' 즉시 푸시 체크해준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 히스토리 그래프 확인하면 고양이와 문어의 브랜치가 충돌이 일어났다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecayB5/btse958qZUl/aEBW8CBN4kUXpkIdLn43K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecayB5/btse958qZUl/aEBW8CBN4kUXpkIdLn43K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecayB5/btse958qZUl/aEBW8CBN4kUXpkIdLn43K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FecayB5%2Fbtse958qZUl%2FaEBW8CBN4kUXpkIdLn43K0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;468&quot; height=&quot;124&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 현재 브랜치 상황&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJt4no/btse98KJ7S0/myoDBekwEL31Sb5b9tfNE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJt4no/btse98KJ7S0/myoDBekwEL31Sb5b9tfNE0/img.png&quot; data-alt=&quot;커밋3은 고양이가 디테일페이지 추가한거&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJt4no/btse98KJ7S0/myoDBekwEL31Sb5b9tfNE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJt4no%2Fbtse98KJ7S0%2FmyoDBekwEL31Sb5b9tfNE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;306&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;커밋3은 고양이가 디테일페이지 추가한거&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;merge : 병합. 브랜치와 브랜치를 합치기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;merge commit(병합커밋) : 새로운 커밋이 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fast-forward(빨리감기) : 후속 커밋으로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;conflict(충돌) : 동일한 부분을 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고양이가 [feature/detail-page]브랜치를 [master]와 합칠 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- fast forward merge 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 = [master]브랜치가 커밋4를 가리킴&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L0Sli/btsiqg6IdOq/De9AY0mHWYtd5Uu0D3teBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L0Sli/btsiqg6IdOq/De9AY0mHWYtd5Uu0D3teBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L0Sli/btsiqg6IdOq/De9AY0mHWYtd5Uu0D3teBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL0Sli%2Fbtsiqg6IdOq%2FDe9AY0mHWYtd5Uu0D3teBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;676&quot; height=&quot;267&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨리감기 병합 하는법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. [master]브랜치를 기준으로 다른 브랜치를 병합하려면 [master]브랜치로 체크아웃&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 병합하기를 원하는 커밋에서 우클릭 - 병합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. [master]브랜치와 해당 브랜치가 같은 커밋을 가리킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. [master]에 '2'가 표시되는데 이는, 2개의 커밋이 원격저장소에 안 올라감을 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. push버튼에도 '2'가 표시되는데 [master] 체크박스 체크 후 push&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;459&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYh2xa/btsiqV19GDH/RceBYkEMKjHhRM4mc617gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYh2xa/btsiqV19GDH/RceBYkEMKjHhRM4mc617gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYh2xa/btsiqV19GDH/RceBYkEMKjHhRM4mc617gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYh2xa%2FbtsiqV19GDH%2FRceBYkEMKjHhRM4mc617gk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;503&quot; height=&quot;103&quot; data-origin-width=&quot;459&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문어가 [feature/cart]브랜치를 [master]와 합칠 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 커밋4와 커밋5를 합친 merge commit을 만들어야 함. 새로운 병합커밋의 위치를 [master]브랜치에 둔다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SsNeV/btsis7Ak2VE/1qAQEkgBcgRFDHQdlu898k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SsNeV/btsis7Ak2VE/1qAQEkgBcgRFDHQdlu898k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SsNeV/btsis7Ak2VE/1qAQEkgBcgRFDHQdlu898k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSsNeV%2Fbtsis7Ak2VE%2F1qAQEkgBcgRFDHQdlu898k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;438&quot; height=&quot;232&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;conflict(충돌) 해결하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. [feature/cart]브랜치로 체크아웃&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. [master]브랜치 우클릭 - 병합 - 충돌병합 알림 나옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. '커밋하지 않은 변경사항' 선택 - feature-list.md가 스테이지 아래에 있음(충돌이 발생한 파일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. feature-list.md오픈 '======'를 기준으로 위는 베이스브랜치[feature/cart]코드 / 아래는 병합대상[master]코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 개발자끼리 합의해서 수정 후 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 소스트리에서 feature-list.md 파일의 미리보기에서 확인 후 커밋 - 영문 메시지가 자동생성되며 병합 커밋 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 병합커밋이 [feature/cart]브랜치에 업로드 됨 충돌해결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. push - [feature/cart]체크 후 push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. [master]브랜치에 반영하기 위해 [master]브랜치로 체크아웃&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. [feature/cart] 커밋 우클릭 병합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. [master]브랜치 push하면 모든 브랜치들이 다 반영&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀 리퀘스트 (pull reauest) : 협력자에게 브랜치 병합을 요청하는 메시지를 보내는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 현재브랜치 [master]브랜치에서 브랜치 아이콘 클릭 후 [feature/comment]브랜치 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. vs code 'comment.md' 생성 및 내용 작성 후 iTshirt-cat폴더에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 커밋 후 푸시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 원격저장소에서 [feature/comment]브랜치 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. compare &amp;amp; pull reaurst 버튼 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. base브랜치와 compare브랜치 확인. base브랜치:master , compare브랜치 : feature/comment설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;베이스브랜치 : 병합 결과물이 올라갈 기준이 되는 브랜치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교브랜치 : 현재 기준 브랜치의 비교대상이 되는 브랜치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 개발 완료한 기능에 대한 제목 및 설명 추가 후 Create pull request 버튼 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 협력자가 pull request 탭 확인 - 원격저장소의 reviewer(협력자)가 풀 리퀘스트를 확인하고 검토.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;협력자의 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Accept : 풀 리퀘스트 수락&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Request change : 수정요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Merge pull Request : 병합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. Merge pull request 후 병합 커밋(Confitm merge)클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 병합 후 닫힘 메시지 병합완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. pull request탭의 closed탭 확인(닫혀진 풀 리퀘스트)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 소스트리 확인하면 [origin/master]브랜치가 옛날 커밋을 가리키고 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 패치 아이콘 실행 - 원격과 로컬을 실시간으로 동기화 시켜줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. [master]브랜치 이동 후 pull&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Major upgrade : sw 사용자가 크게 느낄 변화를 적용한 경우 v2.x -&amp;gt; v3.x&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Minor upgrade : 작은 변화 v2.3 -&amp;gt; v2.4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;release : 프로그램을 출시하는 것. 버전의 기록:tag&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tag : 특정 커밋에 포스트잇 붙이기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 태그 아이콘 클릭 후 [master]브랜치를 확인하고 'v1.0.0'태그 달기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. push 하단의 (모든태그푸시)체크박스 체크. 원격저장소로 push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 원격저장소의 [1 release] 탭 태그 확인&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격저장소에 대한 push 권한을 가진 사람은 원칙적으로 원격저장소 원본저장소를 만든 소유자만 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 - collaborator(협력자)로 가면 권한을 부여할 협력자를 등록할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본저장소의 소유자는 협력자가 많아지는 경우 협력자들의 push로 인해 원본저장소를 관리하기 힘들어지고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;협력자(개발자)들은 원본저장소에 자신의 수정 내용을 직접 push하는 것에 부담이 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 해결방안 : pull request&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fork(포크)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 브랜치를 포함한 원본저장소의 모든 커밋 이력을 새로운 원격저장소로 전체 복사하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 포크한 원격저장소의 이력은 추가적으로 등록해야 함(새로운 주소이기 때문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 브랜치는 5인 이하 협업시 유리, 포크는 50인 이상의 다수&amp;nbsp; 협업시 유리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VEhG3/btsizdNPFMx/J1fWCN7aUbJ8kdHJkr7t00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VEhG3/btsizdNPFMx/J1fWCN7aUbJ8kdHJkr7t00/img.png&quot; data-alt=&quot;branch와 fork의 차이점&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VEhG3/btsizdNPFMx/J1fWCN7aUbJ8kdHJkr7t00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVEhG3%2FbtsizdNPFMx%2FJ1fWCN7aUbJ8kdHJkr7t00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;125&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;branch와 fork의 차이점&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 제3의 인물 너구리 등장 너구리 계정이 고양이와 문어의 iTshirt 원본저장소 접근 후 [fork] 클릭 너구리 계정에 iTshirt 원본저장소 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 너구리 계정의 iTshirt 원본저장소 이동 후 소스트리에 clone&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. vs code에서 너구리폴더에 like.md 새파일 생성 예시로 '좋아요 기능 추가' 저장 커밋 후 푸시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 포크한 원격저장소의 [New pull request]&amp;nbsp; 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. head의 변경사항을 base에 합치는것 설명 작성 후 [Create pull request] 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[head repository] : 너구리가 포크한 원격저장소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[base repository] : 고양이와 문어의 원본저장소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 고양이와 문어의 full request approve(승인)와 merge 대기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. (고양이계정로그인) 원본저장소의 [Insight] 탭 클릭 &amp;gt; [Forks] 클릭 후 정보확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. [pull request] 탭 확인 &amp;gt; [File changed] 탭의 [Review changes]클릭하면 [Write]창이 오픈되는데 [Approve] &amp;gt; [Submit Review]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Comment] : 댓글만 작성 / [Approve] : 댓글을 달고 바로 병합해도 좋을 경우 / [Request changes] : 수정 요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 리뷰는 풀리퀘스트 하단에 댓글처럼 달린다. [Merge pull request] 클릭하여 병합(원본저장소 주인만 가능) 후 [Confirm merge] 병합완료&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rebase : 묵은 커밋을 새커밋으로 이력조작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 고양이&amp;amp;문어의 원본저장소와 너구리가 fork한 원격저장소를 충돌을 유도하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 너구리가 너구리 저장소의 'like.md'파일을 수정한다. 예시로 2번라인에 '찜하기 기능'을 추가하고 커밋,push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 충돌을 위해 고양이가 원본저장소에 'like.md'파일을 수정한다 예시로 2번라인에 '싫어요 기능'을 추가하고 README파일의 개발자목록에 너구리추가하고 커밋,push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 너구리가 2번에 한 커밋을 원본저장소에 풀리퀘스트 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 빨간색메시지 'Can't automatically merge' 코드가 충돌했다는 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재까지 너구리는 포크한 이후의&amp;nbsp; 고양이의 원본저장소의 상태를 모른다 서로 다른 원격저장소이기 때문이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;add remote : 다른(여러) 원격저장소의 히스토리를 보는 방법은? : 소스트리가 원본저장소와 원격저장소를 동시에 추적하도록 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 너구리가 소스트리에서 [저장소 - 원격저장소 추가] 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. [추가]클릭 원격이름:upstream(원본저장소를 지칭하는 관용적 닉네임) / URL경로:고양이 원본저장소 주소 / 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 왼쪽 사이드바 원격 섹션에 [upstream]추가됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 패치(fetch)수행하기 위해 [upstream]우클릭 -&amp;gt; upstream에서 가져오기 선택(원본저장소에서 히스토리 받아오는 것)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패치 : 원본저장소 이력을 업데이트. 이력만 가져오고 코드에는 영향 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pull : 코드까지 가져와서 내 코드에 반영&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀리퀘스트 시 충돌해결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1). 내 브랜치에서 병합커밋 생성 후 풀리퀘스트 보내기 - 병합을 위해 불필요한 커밋이력이 남는 문제점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2). rebase 후 풀리퀘스트 보내기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reabase : 커밋의 베이스 커밋이력을 조정 - 빨리감기 병합 사용가능, 브랜치의 이력이 간단해지는 장점. 충돌은 rebase작업 도중 해소된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHDq3r/btsiBNogQ0d/sjM2XKfTKf6pAQi8bbf3VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHDq3r/btsiBNogQ0d/sjM2XKfTKf6pAQi8bbf3VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHDq3r/btsiBNogQ0d/sjM2XKfTKf6pAQi8bbf3VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHDq3r%2FbtsiBNogQ0d%2FsjM2XKfTKf6pAQi8bbf3VK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;315&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 너구리의 history를 보면 '찜하기 기능 추가'의 베이스가 '좋아요 기능 추가'인데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJSWx/btsizcPmvWB/F5kRPKCBtgbjRy7hBtwJh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJSWx/btsizcPmvWB/F5kRPKCBtgbjRy7hBtwJh1/img.png&quot; data-alt=&quot;패치 upstream은 고양이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJSWx/btsizcPmvWB/F5kRPKCBtgbjRy7hBtwJh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwJSWx%2FbtsizcPmvWB%2FF5kRPKCBtgbjRy7hBtwJh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;437&quot; height=&quot;82&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;97&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;패치 upstream은 고양이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 커밋을 upstream/master의 '개발자 목록에 너구리 추가'로 변경 - 선택 후 우클릭 &amp;gt; 재배치 선택 &amp;gt; 경고창확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvop8r/btsizc9GWtb/eL1JjwCwcO4NcY6owxAEjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvop8r/btsizc9GWtb/eL1JjwCwcO4NcY6owxAEjK/img.png&quot; data-alt=&quot;rebase&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvop8r/btsizc9GWtb/eL1JjwCwcO4NcY6owxAEjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvop8r%2Fbtsizc9GWtb%2FeL1JjwCwcO4NcY6owxAEjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;199&quot; height=&quot;186&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;rebase&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 아직 너구리와 고양이가 서로 수정한 'like.md'의 2번라인의 충돌로 경고팝업이 뜨며 '커밋하지 않은 변경사항'이 나타난다. 너구리가 vs code로 코드를 정리하고 저장한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 'like.md'파일을 스테이지에 올리고 [액션 - 재배치 계속] 클릭(리베이스는 커밋을 하나씩 비교하면서 충돌여부검사 하기때문에 이후에도 추가충돌이 발생할 수 있기 때문에 클릭)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. '찜하기 기능 추가'의 베이스커밋이 [upstream/master]로 변경되어 rebase에 성공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. rebase는 이력을 조작하는 위험한 행위라 단독으로 사용하는 브랜치에서만 사용을 권장하여 일반푸시는 안돼, 강제로 푸시해야한다. [도구 - 옵션] 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. [Git]탭에서 [강제 푸시 가능] 체크(푸시할때 강제푸시체크박스를 표현) 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. push &amp;gt; [강제 푸시]체크 &amp;gt; push &amp;gt; 경고창 예 &amp;gt; 원격저장소에도 리베이스 반영(push)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18. 너구리가 너구리 원격저장소에서 [New pull request] 클릭하면 고양이의 원본저장소로 자동변경되어 'Able to merge'표시되어 [Create pull request]클릭을 하면 풀리퀘스트가 된다. 고양이에게 보낼 메시지 작성해서 풀리퀘스트를 만든다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19. 고양이는 승인 및 병합 완성&lt;/p&gt;</description>
      <category>전공공부/Git</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>리베이스</category>
      <category>머지</category>
      <category>병합</category>
      <category>브랜치</category>
      <category>충돌</category>
      <category>패치</category>
      <category>포크</category>
      <category>풀리퀘스트</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/32</guid>
      <comments>https://hongjunwoo.tistory.com/32#entry32comment</comments>
      <pubDate>Mon, 5 Jun 2023 02:49:47 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 임시저장</title>
      <link>https://hongjunwoo.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScripts : 브라우저 전용 스크립트 언어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 스크립트 언어 - 간편한 코딩을 목적으로 만들어진 프로그래밍 언어. 단기간에 습득 및 개발 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 인터프리터 언어 - 프로그램을 컴파일하지 않고 소스코드 레벨에서 한 줄씩 번역하면서 실행한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-단점 : 컴파일 언어에 비하여 느림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-장점 : 컴파일과 같은 특별한 단계가 필요없음, 코드를 작성하여 바로 실행 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 여러 환경에서 이용 가능&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;script&amp;gt; 태그 : JavaScript 코드를 HTML에 집어넣기 위한 태그&lt;/p&gt;
&lt;pre id=&quot;code_1682368743198&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;body&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot; src = &quot;Hello.js&quot;&amp;gt; // 스크립트 코드 파일을 외부화해서 src로 사용하기. type속성을 고정값이다. 재활용 용이 파악 용이
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt; // script는 &amp;lt;/body&amp;gt;나 &amp;lt;/head&amp;gt;태그 직전에 기술하는걸 추천한다

// 스크립트 코드를 외부화 하지않고 인라인으로 사용하는 방법
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
&amp;lt;!--
JavaScript코드
// --&amp;gt;
&amp;lt;/script&amp;gt;

// 외부 스크립트와 인라인 스크립트를 같이 사용할 때
&amp;lt;script type=&quot;text/javascript&quot; src = &quot;Hello.js&quot;&amp;gt;
&amp;lt;/script&amp;gt; // 꼭 마쳐준다
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    &amp;lt;!--
    JavaScript코드
    // --&amp;gt;
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;statement 규칙&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 문장의 맨 끝에 세미콜론(;)을 붙인다 - 생략가능하지만 단락의 구분을 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 문장의 도중에 공백이나 개행, 탭 포함 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 대/소문자 구별됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석 comments&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스크립트 동작에는 상관없는 메모와 같은 정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떠한 목적을 위해 작성했는지, 다른 사람이 봤을 때 이해하기 위해, 코드가 무엇을 하고 있으며 무엇을 목적으로 작성되었는지 파악&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 장기적인 유지보수를 전제로 한 애플리케이션에서는 주석의 기술은 필수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. // comment : 단일 행 주석이다. //에서부터 해당 행의 끝까지를 주석처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. /* comment */ : 복수 행 주석이다. /*~*/으로 둘러싼 블록을 주석처리&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수 : 데이터를 격납하는 그릇&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수의 선언 : 변수의 이름을 JavaScript에 등록하고 값을 격납하기 위한 영역을 메모리 상에 확보하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- var 명령을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) var msg; - &quot;msg&quot;라는 이름의 변수 선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기값을 설정하지 않았을 경우 : JavaScript에서 디폴트로 정의되지 않은 값을 의미하는 undefined를 변수에 할당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식별자의 명명규칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. camelCase 기법 : 앞 단어 첫 문자는 소문자, 그 이후의 단어의 첫 문자는 대문자 ex) lastName&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Pascal 기법 : 모든 단어의 첫 문자는 대문자 ex) LastName&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 언더스코프 기법 : 모든 단어의 첫 문자는 소문자, 단어 간은 '_'로 연결 ex) last_name&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변수명,함수명 : camelCase 기법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클래스(구조체)명 : Pascal 기법&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터형 : 데이터의 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변수는 대입되는 값에 따라서 데이터형이나 크기가 변환된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본형 데이터형 - 값 그 자체가 직접 격납된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 수치형 (number)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 문자열형(string) : 작은따옴표 / 큰 따옴표로 감싸인 0개 이상의 문자 집합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 논리형 (boolean) : true(참) / false(거짓)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 특수형 (null/undefined) : 값이 미정의된 것을 나타냄&lt;/p&gt;
&lt;pre id=&quot;code_1682367388595&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var x; // 변수값이 없는데 변수를 호출함
console.log(x);

undefined&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조형 데이터형 - 값을 실제로 격납하고 있는 메모리상의 어드레스(참조값)을 격납한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 배열 (array) : 데이터의 집합 (각 요소에는 인덱스 번호로 접근 가능).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 콤마로 구분한 값을 대괄호로 감싼 형태.&lt;/p&gt;
&lt;pre id=&quot;code_1682364902074&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var ary = ['Java', 'Script', 'HTML']; // 이러한 배열이 있다면 선두 요소부터 0,1,2... 인덱스 번호가 부여됨
console.log(ary[0]); // 0번출력

java

var ary = ['Java', ['Script','Html'], 'CSS']; // 배열 안의 배열에서 다시 배열이 있는 경우
console.log(ary[1][0]); // 1번배열에서 0번출력

Script&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 객체 (object) : 데이터의 집합 ( 각 요소에는 이름으로 접근 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이름을 키로 하여 접근이 가능한 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로퍼티 : 객체 내의 개별 데이터. 문자열이나 수치, 함수 격납 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드 : 함수가 격납된 프로퍼티&lt;/p&gt;
&lt;pre id=&quot;code_1682366079922&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var obj = {
    x:1, y:2, z:3 // 하나하나가 프로퍼티이며 x,y,z는 키(key)(프로퍼티 명) 1,2,3은 값(value)(프로퍼티 값)
};
console.log(obj.x); // 접근 방식 중 마침표 표기법
console.log(obj['x']); // 대괄호 표기법 대괄호에 따옴표로 감싸줘야 한다&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 함수 (function) : 일련의 처리(절차)의 집합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리터럴 : 데이터형에 격납되는 값 그 자체, 또는 값의 표현방법&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;산술연산자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b43cef/btsca0vz8Yi/iCEtaKR1wcJOCfFPIQ89A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b43cef/btsca0vz8Yi/iCEtaKR1wcJOCfFPIQ89A0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b43cef/btsca0vz8Yi/iCEtaKR1wcJOCfFPIQ89A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb43cef%2Fbtsca0vz8Yi%2FiCEtaKR1wcJOCfFPIQ89A0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;503&quot; height=&quot;632&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+&amp;nbsp;연산자&lt;/p&gt;
&lt;pre id=&quot;code_1682372765918&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(10+1); // 수+수 - add연산
console.log('10'+1); // 문자열+수 - 문자열 연결 연산
var today = new Date();
console.log(1234+today);

11
101
1234Tue Apr 25 2023 06:43:34 GMT+0900 (대한민국 표준시)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;증감 연산자&lt;/p&gt;
&lt;pre id=&quot;code_1682373216930&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var num = 10;
var result = ++num // 전치연산 num에 1을 더하여 result 결과출력
console.log(result);

11&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대입 연산자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ZB6x/btscCCTcwkt/Jt9BhV46duKYVjSKRPuYF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ZB6x/btscCCTcwkt/Jt9BhV46duKYVjSKRPuYF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ZB6x/btscCCTcwkt/Jt9BhV46duKYVjSKRPuYF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ZB6x%2FbtscCCTcwkt%2FJt9BhV46duKYVjSKRPuYF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;189&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;189&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1682377362088&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;기본형 대입연산자
var x = 1;
var y = x; // 값이 전달
x = 2;
console.log(y);
1

참조형 대입연산자
var ary1 = [0, 1, 2];
var ary2 = ary1; // 주소값이 전달
ary1[0] = 5;
console.log(ary2);
5,1,2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교연산자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAEiTV/btscfB3tENj/VrKjf8DnPSNGrMlIFLb6Wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAEiTV/btscfB3tENj/VrKjf8DnPSNGrMlIFLb6Wk/img.png&quot; data-alt=&quot;결과값은 true/false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAEiTV/btscfB3tENj/VrKjf8DnPSNGrMlIFLb6Wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAEiTV%2FbtscfB3tENj%2FVrKjf8DnPSNGrMlIFLb6Wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;396&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과값은 true/false&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동등연산자(==), 일치연산자(===)&lt;/p&gt;
&lt;pre id=&quot;code_1682380366899&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기본형에서는 값 그 자체를 비교하므로 보이는 것과 비교 결과가 일치
var x=2;
var y='2';
console.log(x==y); // x는 숫자고 y는 문자열이지만 자바스크립트가 오퍼랜드를 변환한다
true

// 참조형에서는 보관하고 있는 참조장소를 비교하므로 보이는 것과 일치하지않음
var ary1 = ['Java', 'Script', 'CSS'];
var ary2 = ['Java', 'Script', 'CSS'];
console.log(ary1 == ary2);
flase

// 일치연산자를 사용하면 데이터형까지 고려하기 때문에 엄격하게 비교
var x=2;
var y='2';
console.log(x===y); // 문자열과 숫자를 엄격하게 비교해준다
false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리연산자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과값 false : 공백문자열(&quot;&quot;), 숫자0, NaN(Not a Number), null, undefined&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; true : 그 외의 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;%% (AND) : 모든값이 true면 true : 스티브잡스는 한국인 이고AND, 남자이다 = false&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-첫번째 false를 발견하는 즉시 평가를 멈춘다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;|| (OR) : 여러개 중 하나라도 true면 true : 스티브잡스는 한국인 이거나OR 남자이다 = true&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-OR은 첫번째 true를 발견하는 즉시 평가를 멈춘다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;! (NOT) : true면 false / false면 true&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkxA6B/btscyYWNvkN/RRd8W7Tud3cZtNVgodemS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkxA6B/btscyYWNvkN/RRd8W7Tud3cZtNVgodemS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkxA6B/btscyYWNvkN/RRd8W7Tud3cZtNVgodemS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkxA6B%2FbtscyYWNvkN%2FRRd8W7Tud3cZtNVgodemS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;607&quot; height=&quot;136&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1682400717415&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// OR
// 이름이 Mike이거나OR 성인이면 통과
const name = &quot;Mike&quot;;
const age = 30;

if(name === &quot;Mike&quot; || age &amp;gt; 19){ // name에서 true를 발견해서 즉시 멈춘다
    console.log('통과');
}

// AND
// 이름이 Mike이고AND 성인이면 통과
const name = &quot;Mike&quot;;
const age = 30; // 하나라도 조건에 안맞으면 false가 뜬다

if(name === &quot;Mike&quot; &amp;amp;&amp;amp; age &amp;gt; 19){
    console.log('통과');
} else {
    console.log('돌아가')
}

// NOT
// 나이를 입력받아 성인 아니면 돌아가
const age = prompt('나이가..?');
const isAdult = age &amp;gt; 19;

if(!isAdult){
    console.log('돌아가..')
}

// 우선순위 AND&amp;gt;OR
// 남자이고, 이름이 Mike 이거나 성인이면 통과
const gender = 'F';
const name = 'Jane';
const isAdult = true;
if(gender === 'M' &amp;amp;&amp;amp; (name === 'Mike' || isAdult)){ // 이미 여자이기때문에 뒤에 OR은 작동안함 돌아가
    console.log('통과')
} else {
    console.log('돌아가')
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비트연산자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 오퍼랜드에 대해 이진수 연산&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4MZRt/btscfzYSOnF/wRLhkJWNYH2kIDRsxk7kM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4MZRt/btscfzYSOnF/wRLhkJWNYH2kIDRsxk7kM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4MZRt/btscfzYSOnF/wRLhkJWNYH2kIDRsxk7kM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4MZRt%2FbtscfzYSOnF%2FwRLhkJWNYH2kIDRsxk7kM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;564&quot; height=&quot;363&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외의 연산자들&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DRd5L/btscCBGMZLv/7kytyQ6aK2U2W7tSkvLsE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DRd5L/btscCBGMZLv/7kytyQ6aK2U2W7tSkvLsE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DRd5L/btscCBGMZLv/7kytyQ6aK2U2W7tSkvLsE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDRd5L%2FbtscCBGMZLv%2F7kytyQ6aK2U2W7tSkvLsE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;413&quot; height=&quot;276&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산자 우선순위&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzjVxw/btscoD7BCuV/q6OkH1hSfD2ZXJ5Otbdxt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzjVxw/btscoD7BCuV/q6OkH1hSfD2ZXJ5Otbdxt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzjVxw/btscoD7BCuV/q6OkH1hSfD2ZXJ5Otbdxt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzjVxw%2FbtscoD7BCuV%2Fq6OkH1hSfD2ZXJ5Otbdxt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;506&quot; height=&quot;266&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산자 결합순서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRVny8/btscyYvJWFg/8k1MDqKcA3dBepstokk5k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRVny8/btscyYvJWFg/8k1MDqKcA3dBepstokk5k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRVny8/btscyYvJWFg/8k1MDqKcA3dBepstokk5k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRVny8%2FbtscyYvJWFg%2F8k1MDqKcA3dBepstokk5k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;282&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1682403981324&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// if, else, else if문
var x = 30;
if (x &amp;gt;= 20){
    console.log('변수 x는 20이상이다'); // 첫번째 if가 true면 실행
} else if (x &amp;gt;= 10) {
    console.log('변수 x는 10이상이다'); // 그게 아니라 이게 true면 실행
} else {
    console.log('변수 x는 10미만이다'); // 다 아니면 실행
}

변수 x는 20이상이다 // 첫번째 if가 true여서 첫번째 if문에서 출력되고 끝남

// if문 중첩
var x = 30;
if (x &amp;gt;= 10) { // 만약 x가 10미만이면 바로 else 실행
    if (x &amp;gt;= 20){ // x가 10이상이고 20이상이면 실행 여기서 아니면 아무것도 출력하지 않고 종료
        console.log('변수 x는 20 이상이다');
    }
}
else {
    console.log('변수 x는 10 미만이다')
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682404712222&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// switch문은 선두의 식이 우선 평가되며 값에 일치하는 case블록을 실행하고 일치하는 블록이 없다면 마지막 default 블록 호출
var rank = &quot;B&quot;;
switch(rank){
    case 'A' :
        console.log('A랭크다');
        break;
    case 'B' :
        console.log('B랭크다');
        break; // break명령을 하지 않으면 멈추지않고 아래것까지 다 출력됨 현재의 블록에서 빠져나오기 위한 명령
    case 'C' :
        console.log('C랭크다');
        break;
    default :
        console.log('랭크 이외다');
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682404878013&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// while문 : 조건식이 true인 동안 반복 처리
var i = 0;
while(i&amp;lt;10){
    console.log(i);
    i++; // 출력하고 1을 더해서 while로 돌아가기 반복. i가 10이되면 반복문을 빠져나옴
}
0
1
2
3
4

// do.. while문 : while과 비슷한데 조건문을 아래로 옮길수있다
// while과 다르게 후치판단하여 조건에 상관없이 최소 1회 루프를 실행한다 while은 처음부터 조건에 안맞으면 break가 걸림
var i = 0;
do {
    console.log(i); // 코드를 실행하고
    i++;
} while (i&amp;lt;5) // 조건을 체크한다
0
1
2
3
4&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682405260372&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// for문
// 초기값; 조건; 코드실행후1더해줌
// i=0시작 i가 5보다 작으므로 코드실행. i값 1증가 처음으로 돌아와서 반복. false가 되면 멈춤
for(var i = 0; i &amp;lt; 5; i++) {
    console.log(i) // 0~4까지 출력됨
}
0
1
2
3
4

// for in문
var member = ['야마다', '사과', '귤'];
for (var i in member){
    console.log('이름은' + member[i]);
}
이름은야마다
이름은사과
이름은귤

var triangle = {width : 30, height : 50};
for (var j in triangle) {
    console.log(j + '=' + triangle[j]);
}
width=30
height=50&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682407853549&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// break : 반복문을 멈추고 빠져나옴
for (var i = 0; i &amp;lt; 5; i++) {
    if (i === 3) {
        break; // i가 3이 됐을때 5까지 증감하지말고 루프를 멈춰줘
    }
    console.log(i);
}
0
1
2

// continue : 멈추고 다음 반복으로 진행
for (var i = 0; i &amp;lt; 5; i++) {
    if (i === 3) {
        continue; // i가 3이 됐을때만 건너뛰어줘
    }
    console.log(i);
}
0
1
2
4&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682408779365&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// try : 예외가 발생할지 모르는 처리
// catch(e) : 예외가 발생했을 경우에 실행되는 처리
// finally : 예외의 유무에 상관없이 실행하는 처리
var i =1;
try{
    i = i*j; // 예외발생
} catch(e) {
    console.log(e.message); // 에러 정보가 전달됨
}finally {
    console.log('처리가 완료되었다');
}
j is not defined
처리가 완료되었다

// throw : 예외를 발생시키는 명령 에러메시지
var i = 1;
var y = 0;
try{
    if(y == 0) { throw new Error('0으로 나누려고 했다');}
    var z = x / y;
} catch(e) {
    console.log(e.message);
}
0으로 나누려고 했다&lt;/code&gt;&lt;/pre&gt;</description>
      <category>전공공부/자바스크립트 (JavaScript)</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/31</guid>
      <comments>https://hongjunwoo.tistory.com/31#entry31comment</comments>
      <pubDate>Tue, 25 Apr 2023 16:46:36 +0900</pubDate>
    </item>
    <item>
      <title>[Git] Git.GitHub, 소스트리, VS Code</title>
      <link>https://hongjunwoo.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;버전 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 내가 원하는 시점(버전)으로 이동할 수 있게 해 주는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 협업 프로젝트에서는 버전관리가 필수적임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git (툴) : 소스코드 버전관리 시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github (사이트 이름) : Git으로 관리하는 프로젝트를 올려두고 공유할 수 있는 Git 호스팅 사이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오픈소스 : 전세계 개발자와 협업가능한 공개저장소 프로젝트 ex)구글 텐서플로우, 애플 스위프트, 웹 개발용 Vue.js&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬 저장소 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 작업용 폴더 만들기 - 예시로 iTshir-cat 이라고 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 텍스트 문서 만들기 -&amp;nbsp; 예시로 README 라고 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 파일 오픈 후 작성 - 예시로 개발자 티셔츠 쇼핑몰 오픈소스 라고 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Git Bash 시작 - 폴더 우클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. - git init 입력 후 엔터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. Initialized empty Git repository 텍스트 출력 - 작업용 폴더에 .git 폴더(로컬저장소) 생성됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 커밋(버전) 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 버전관리를 위한 개인정보 등록 -&amp;nbsp; git config --global user. 이메일, 이름입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git config --global user.email&amp;nbsp; &quot;hello.git.이메일&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Enter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git config --global user.name &quot;이름&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 커밋에 추가할 파일 선택 - git add 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git add README.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 커밋 실행 -&amp;nbsp; git commit -m&quot;코멘트&quot; 상세 설명(comment) 작성 '-m'은&amp;nbsp; message의 약자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git commit -m &quot;사이트 설명 추가&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 커밋(버전) 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 두 번째 버전 작성 -&amp;nbsp; README.txt 오픈 &amp;gt; 마지막에 '짱' 입력 &amp;gt; 저장 후 닫기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. add 명령어로 파일 선택 &amp;gt; 새로운 코멘트와 함께 커밋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git add README.txt&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Enter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git commit -m &quot;설명 업데이트&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 첫 번째 커밋과, '짱'을 추가한 두 번째 커밋이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 커밋으로 이동하는 방법을 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. log 명령어로 버전 확인 - 현재 커밋(가장 최근 커밋)부터 나타내준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git log&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 두 개의 커밋이 있음을 나타내주고, 첫 번째 커밋의 앞 7 자리 커밋 아이디를 복사하여 checkout 명령어로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git checkout 5813bb5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. README파일을 확인하면 첫 번째 커밋상태로 돌아가있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 두 번째 커밋(가장 최신 버전)으로 이동하려면 똑같이 git checkout 아이디7자리 를 해줘도 되지만 아이디 대신 - 를 명령&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git checkout -&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. README파일을 오픈하면 다시 두 번째 커밋상태로 돌아가있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github 원격저장소 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. New repository 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Repository name(작업용폴더), Descrition(설명) 작성 후 Create repository 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. iTshirt 이름의 원격저장소가 생성됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격저장소에 커밋 올리기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 로컬저장소에 원격저장소 주소를 알려준다 - remote add origin 명령어 사용하여 원격저장소 주소를 알려준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git remote add origin 원격저장소복사한주소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 로컬저장소의 커밋을 올림 - push 명령&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git push origin master&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Github 원격저장소를 확인하면 로컬저장소의 커밋(가장 최근에 커밋한 두 번째 커밋)이 올라가있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격저장소의 커밋을 로컬저장소에 내려받기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;clone : 원격저장소 코드 전체를 내려받은 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 다른 폴더 만들기 - 예시로 다른 사람의 폴더라고 가정해 iTshirt-oct 폴더 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 폴더 우클릭 후 Git Bash Here&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 클론할 원격저장소 주소 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 클론 내려받기 - clone 명령사용, '.'은 현재 폴더에 받으라는 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git clone 원격저장소복사한주소 .(한칸 띄우고 마침표)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 폴더를 확인하면 cat이 작업했던 커밋이 oct의 로컬저장소에 클론됐다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. oct 폴더에서 새로운 커밋 생성 - README에 내용을 추가해 수정해준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 새로운 커밋 생성 후 원격저장소에 올림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git add README.txt (파일을 커밋함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Enter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git commit -m &quot;개발자 목록 추가&quot; (커밋에 설명을 붙임)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Enter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git push origin master (원격저장소에 푸시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 원격저장소를 확인하면 oct의 커밋이 올라가있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격저장소의 새로운 커밋을 로컬저장소에 갱신하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 과정을 완료했을 때 로컬저장소 cat은 초반에 작업했던 개발자 목록이 미반영된 README파일을 갖고있고, oct는 방금 본인이 작업했던 개발자 목록 추가된 README파일을 갖고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격저장소에는 oct가 커밋했던 개발자 목록 추가된 커밋이 있는데, 이를 cat이 확인하고 본인의 로컬저장소에 갱신하는 과정은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. iTshirt-cat 폴더 Git Bash Here 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. pull 명령 사용 - 원격저장소에 새로운 커밋이 있으면 로컬저장소에 내려받으라는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git pull origin master&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 폴더확인하면 새로운 커밋(oct가 작업한 커밋)이 반영&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스트리 : Git 사용을 위한 GUI 프로그램&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCEqU4/btsbUqzZoDR/8sOAA1t4u2bJhl6ak2HAA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCEqU4/btsbUqzZoDR/8sOAA1t4u2bJhl6ak2HAA1/img.png&quot; data-alt=&quot;소스트리 화면 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCEqU4/btsbUqzZoDR/8sOAA1t4u2bJhl6ak2HAA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCEqU4%2FbtsbUqzZoDR%2F8sOAA1t4u2bJhl6ak2HAA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;981&quot; height=&quot;375&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;소스트리 화면 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비주얼 스튜디오 코드 : Visual Studio Code - MS사의 IDE tool&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtSxkE/btsbShqAiLm/hSlw7JakJv1AUoTWDqm4xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtSxkE/btsbShqAiLm/hSlw7JakJv1AUoTWDqm4xK/img.png&quot; data-alt=&quot;Visual Studio Code 화면 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtSxkE/btsbShqAiLm/hSlw7JakJv1AUoTWDqm4xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtSxkE%2FbtsbShqAiLm%2FhSlw7JakJv1AUoTWDqm4xK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;992&quot; height=&quot;485&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Visual Studio Code 화면 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VS Code 유용한 확장 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 한국어 확장 팩 : Korean Language Pack for Visual Studio Code&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. JavaScript 실행 확장 팩 : code runner&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github 화면 구성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YE3Pt/btsbSLLwK5I/ox7jxYAZVn07b9dHbAdECk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YE3Pt/btsbSLLwK5I/ox7jxYAZVn07b9dHbAdECk/img.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;412&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.295%; margin-right: 10px;&quot; data-widthpercent=&quot;43.8&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YE3Pt/btsbSLLwK5I/ox7jxYAZVn07b9dHbAdECk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYE3Pt%2FbtsbSLLwK5I%2Fox7jxYAZVn07b9dHbAdECk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DCixO/btsb2U76SZi/llgkD9xb4ujgKkp3TwJ8x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DCixO/btsb2U76SZi/llgkD9xb4ujgKkp3TwJ8x0/img.png&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;492&quot; data-is-animation=&quot;false&quot; style=&quot;width: 55.5422%;&quot; data-widthpercent=&quot;56.2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DCixO/btsb2U76SZi/llgkD9xb4ujgKkp3TwJ8x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDCixO%2Fbtsb2U76SZi%2FllgkD9xb4ujgKkp3TwJ8x0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;982&quot; height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Github 메인 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mNAu4/btsbRLeqMWu/2c4oKvTtA4QigamXm7ZOHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mNAu4/btsbRLeqMWu/2c4oKvTtA4QigamXm7ZOHk/img.png&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;430&quot; data-is-animation=&quot;false&quot; style=&quot;width: 31.3989%; margin-right: 10px;&quot; data-widthpercent=&quot;31.77&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mNAu4/btsbRLeqMWu/2c4oKvTtA4QigamXm7ZOHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmNAu4%2FbtsbRLeqMWu%2F2c4oKvTtA4QigamXm7ZOHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1w2k8/btsb2TnQc28/hj6ipgeWhpKWgOHe3N7mC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1w2k8/btsb2TnQc28/hj6ipgeWhpKWgOHe3N7mC1/img.png&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;360&quot; data-is-animation=&quot;false&quot; style=&quot;width: 67.4383%;&quot; data-widthpercent=&quot;68.23&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1w2k8/btsb2TnQc28/hj6ipgeWhpKWgOHe3N7mC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1w2k8%2Fbtsb2TnQc28%2Fhj6ipgeWhpKWgOHe3N7mC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;971&quot; height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Github 원격저장소 생성 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬저장소를 소스트리에 불러오기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Add 버튼 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 탐색 버튼으로 로컬저장소 폴더 선택 후 추가 - 예시로 iTshirt-cat 폴더선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬저장소의 정체는 맨 처음에 CLI환경(git bash here)에서 명령했던 git init 으로 생성된 .git폴더다. GUI환경(소스트리)에서는 Create 버튼으로 생성가능. 히든 폴더이며, git 버전관리를 위한 정보를 저장한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스트리로 커밋만들고 푸시하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Visual Studio Code 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 폴더열기 - iTshirt-cat 폴더 선택 README.txt 있는거 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 새 파일 생성 - 예시로 tshirt-list.md 파일명 입력, 내용 입력 후 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 새 파일 생성 - 예시로 feature-list.md 파일명 입력, 내용 입력 후 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 소스트리에 돌아오면 커밋하지 않은 변경사항이 생김 - 선택 시 스테이지에 올라가지 않은 파일 섹션에 방금 vs code로 작성한 두 개의 파일이 나타남. README.txt는 변경사항이 없기때문에 안보임. 기존 커밋에 비하여 모든 변경 파일이 보임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 커밋 아이콘 클릭 - 스테이지에 올라가지 않은 파일들을 +클릭해 올림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git add 파일명 과 동일함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 아래 메시지에 코멘트를 입력 - 예시로 티셔츠, 기능리스트 추가 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git commit -m &quot;코멘트내용&quot; 과 동일함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 커밋. 아래는 현재 상태다. 아직 원격저장소에는 위의 커밋이 반영이 안되어있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmxRUA/btsbUPTX1iM/rgK0ujLQaPmApGNEmk1Oe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmxRUA/btsbUPTX1iM/rgK0ujLQaPmApGNEmk1Oe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmxRUA/btsbUPTX1iM/rgK0ujLQaPmApGNEmk1Oe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmxRUA%2FbtsbUPTX1iM%2FrgK0ujLQaPmApGNEmk1Oe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;564&quot; height=&quot;301&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmZvar/btsbSEToHwz/TT8RxVhzxTJMCdude3Y8n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmZvar/btsbSEToHwz/TT8RxVhzxTJMCdude3Y8n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmZvar/btsbSEToHwz/TT8RxVhzxTJMCdude3Y8n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmZvar%2FbtsbSEToHwz%2FTT8RxVhzxTJMCdude3Y8n1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;574&quot; height=&quot;378&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. Push 버튼 클릭 - master 체크박스 체크 - Push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- git push origin master 와 동일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 커밋 그래프 확인하면 master와 origin/master가 모두 최근 커밋한 내용을 가리키고 있다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nbIsy/btsbSKTotNE/d7nH9Evtdxb5KXC3doXmdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nbIsy/btsbSKTotNE/d7nH9Evtdxb5KXC3doXmdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nbIsy/btsbSKTotNE/d7nH9Evtdxb5KXC3doXmdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnbIsy%2FbtsbSKTotNE%2Fd7nH9Evtdxb5KXC3doXmdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;442&quot; height=&quot;108&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>전공공부/Git</category>
      <category>git</category>
      <category>github</category>
      <category>vscode</category>
      <category>깃허브</category>
      <category>버전</category>
      <category>소스트리</category>
      <category>커밋</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/30</guid>
      <comments>https://hongjunwoo.tistory.com/30#entry30comment</comments>
      <pubDate>Sat, 22 Apr 2023 18:48:38 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 기초</title>
      <link>https://hongjunwoo.tistory.com/29</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬은 컴퓨터와 대화하듯 공부할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 파이썬은 인터프리터(interpreter) 언어다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 인터프리터 언어는 사람이 작성한 코드를 컴퓨터에게 즉시 번역해 전달한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 개발에 편의하고, 디버깅에 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 영문법을 기반으로 개발되어 영어와 닮았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. NumPy, TensorFlow와 같은 도구가 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일(compile) 언어는 프로그램 구동속도는 빠르나, 번역속도가 느려 개발이 불편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 예시로는 C, C++ 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통합 개발 환경(IDLE : Integrated Development Environment)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 개발을 효율적으로 수행하기 위해 파이썬에서 제공하는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 개발에 관련된 모든 작업(프로그램 실행, 도움말, 자동완성, 디버깅)을 하나의 프로그램 안에서 처리하는 환경을 제공하는 SW&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;파이썬 기본 연산자&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHsKRB/btsa6Gqhfix/q1K5DaJ6Q3vFF3kIFMjOxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHsKRB/btsa6Gqhfix/q1K5DaJ6Q3vFF3kIFMjOxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHsKRB/btsa6Gqhfix/q1K5DaJ6Q3vFF3kIFMjOxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHsKRB%2Fbtsa6Gqhfix%2Fq1K5DaJ6Q3vFF3kIFMjOxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;426&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681918524531&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 7의 배수 출력 
for i in range(100): # 0~99까지의 숫자
    if i % 7 == 0: # N의 배수는 N으로 나누었을 때 나머지가 0이다
        print(i)

        
0
7
14
21
...생략
84
91
98&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681918853863&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 평균 구하기 round()함수를 통해 N번째 소수점까지 출력 가능
round((50 + 45 + 33 + 39 + 29 + 30) / 6, 1) # 1은 소수점 첫째까지만 표시해달라. 안적으면 반올림됨

37.7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681921789911&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 2중 for문을 이용하여 19단 곱셈표 출력
for item in range(2, 20): # 2~19를 item에 넣어준다
    for each in range(2, 20): # 2~19를 each에 넣어준다
        print(item * each) # 2*2부터 2*19를 마친후에 3*2부터 계속 구해준다. 2중for문은 안쪽에 있는것부터 먼저 수행하고 돌아온다

4
6
...생략
342
361

# 문자열 포매팅
for item in range(2, 20):
	for each in range(2, 20):
 		print('%d X %d = %d' %(item, each, item * each))
        
2 X 2 = 4
2 X 3 = 6
...생략
19 X 18 = 342
19 X 19 = 361&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 함수의 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #444444;&quot;&gt;def 함수명(매개변수):&lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;수행할 문장1&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;수행할 문장2&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #444444;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;def는 함수를 만들 때 사용하는 예약어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수명은 함수를 만드는 사람이 임의로 만들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681924988669&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# def 문으로 함수 만들기. 이 함수의 이름은 add이고 입력으로 2개의 값을 받으며 리턴값(출력값)은 2개의 입력값을 더한 값이다.
def add(a, b): 
    return a + b

add(233, 42)

275&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input() 함수 사용법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input('사용자에게 입력받을 값을 설명하는 내용')&lt;/p&gt;
&lt;pre id=&quot;code_1681925679288&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# input()을 쓰게되면 깜빡이면서 사용자가 입력값을 넣길 기다린다.
a = input('숫자를 하나 입력해 보세요:')
숫자를 하나 입력해 보세요:23 # 사용자가 입력값을 넣길 기다린다. a에 23을 넣어준다.
a
'23'

type(a) # 어떤 자료형인지 알기위한 type()함수를 써준다.
&amp;lt;class 'str'&amp;gt; #인풋 함수로 받은 데이터는 문자(string)형임을 알 수 있다.

a = int(a) # 정수형int로 형변환을 해준다.
type(a)
&amp;lt;class 'int'&amp;gt; # 23이 정수로 형변환이 됐다.
a
23 # 문자열을 가리키는 따옴표가 사라져 정수로 된 모습&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1681926693078&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# input() 함수를 통해 입력을 받고, 입력 받은 숫자에 2를 곱해서 return 해주는 함수 제작
def xadd(a): # 함수제작
    b = a*2 
    return b
    
i = input('숫자를 입력하세요:')
숫자를 입력하세요:4
j = int(i) # 문자열 '4'를 정수 4로 변경하고 j에 저장
sadd = xadd(j) # xadd(x)는 결국 곱하기2를 return해줘야됨
print(sadd)
8

# input을 한번에 정수로 저장하는 방법
def v2():
    a = int(input()) # 이렇게 해준다.
    return a*2

res = v2()
5 # 한번에 정수가 된 모습
print(res)
10&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681928288006&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# if-else문 짝수 홀수 구분하여 출력하기
def seperate(): # 함수 제작
    a = int(input('자연수 중 하나를 입력하세요: ')) # 한번에 정수로 형변환 시키기
    if a % 2 == 0: # 만약 a나누기 2를 했는데 나머지가 0과 같다면
        print('짝수') # '짝수' 출력
    else: # 아니라면
        print('홀수') # '홀수' 출력
        
seperate()
자연수 중 하나를 입력하세요: 2
짝수
seperate()
자연수 중 하나를 입력하세요: 1
홀수&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 입출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈 : 다른 파이썬 프로그램에서 불러와 사용할 수 있게 만들어 놓은 함수 모음집(파이썬 파일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS 모듈 : 운영체제에서 제공하는 기본적 기능(함수) 제공 ex)현재 위치 확인,폴더 이동,파일 조회&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 열기 모드&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;'w' : 파일에 내용을 새로 쓸 때 사용 write&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;'r' : 파일 내용을 읽을 때 사용 read&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;'a' : 파일에 내용을 추가할 때 사용 append&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1681931458844&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 현재 위치(경로) 설정하기
import os # os모듈을 불러오기
os.getcwd() # 현재 위치 확인
'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python310'

os.chdir('C:\Users\user\Desktop\python_test') # 폴더를 이동하려는데 역슬래시가 이스케이프 문자로 인식되어 오류 발생. 순방향 슬래시로 변경해주면 되긴 함.
SyntaxError: incomplete input

os.chdir(r'C:\\Users\user\Desktop\python_test') # 역슬래시를 안바꾸고 앞에 r을 붙이는게 편하다.

os.getcwd() # 위치가 바뀌었는지 확인
'C:\\Users\\user\\Desktop\\python_test'

# 폴더 안의 파일 확인 listdir()
os.listdir() # 현재 경로 os.getcwd() 안에 있는 파일 및 폴더 목록 출력
['abcd.txt', 'temp'] # 리스트 형식으로 출력

# 파일 열기(open)
f = open('a.txt', 'w') # 파일 객체 = open('파일이름', '파일 열기 모드 w는 쓰기모드')

# 파일 닫기(close)
f.close() # 파일을 열었으면 닫는것도 습관화 하기

# 파일 쓰기 모드 : w
f = open('a.txt', 'w') # a.txt를 생성해 쓰기모드로 열어준다.

f.write('나는 오늘 학교에 갔다.')
13 # 입력한 데이터의 양을 반환해줌
f.close() # 더이상 안쓸거면 닫아주기

# 파일 읽기 모드 : r 그리고 seek()함수
f = open('a.txt','r') # r모드로 열어주기. 만약 파일이 존재하지 않으면 오류발생
f.read() # 아까 저장된 내용 읽어줌
'나는 오늘 학교에 갔다.'
f.read() # 다시 읽으면 커서 위치가 파일 가장 끝에 있어 더 읽을 내용이 없음
''
f.seek(0) # 커서 위치를 0으로(맨앞으로)이동하는 함수 seek()
0
f.read() # 다시 읽으면 잘 읽어짐        
'나는 오늘 학교에 갔다.'
f.close() # 할거없으면 닫아주기

# r모드 응용하기. read()로 읽은 것은 문자열임
f = open('a.txt', 'r')         
diary = f.read() # diary에 저장         
print(diary)         
나는 오늘 학교에 갔다.
print(diary[:5]) # 내용의 일부만 슬라이싱         
나는 오늘
f.close()

# 파일 추가 모드 : a
f = open('a.txt','a') # a모드로 열어주기
f.write(' 학교에 가지 않을 날이 올까?') # write()함수로 파일 마지막에 문장을 추가        
17
f.close() # 읽기모드를 열기위해 닫아주기
        
f = open('a.txt', 'r') # r모드로 열기        
f.read() # a모드로 추가했던거 확인        
'나는 오늘 학교에 갔다. 학교에 가지 않을 날이 올까?' 
f.close()

# with문 사용:close를 직접 하지 않나도 자동 적용
with open('a.txt', 'w') as f:
	f.write('읽어주기')
4

# 한글로 작성된 파일 오류 해결 : encoding = 'utf8'
f = open('한글파일.txt', 'r', encoding = 'utf8')&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규표현식 : 특정한 문자의 규칙을 표현하는 방법 또는 식. 특정한 문자열을 찾을 때 유용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;re 모듈을 import해 정규표현식 사용 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgpyYr/btsbmgylUCF/vcc6Ddu5myMxr4E4XVotlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgpyYr/btsbmgylUCF/vcc6Ddu5myMxr4E4XVotlK/img.png&quot; data-alt=&quot;꼭 알면 좋은 정규 표현식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgpyYr/btsbmgylUCF/vcc6Ddu5myMxr4E4XVotlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgpyYr%2FbtsbmgylUCF%2Fvcc6Ddu5myMxr4E4XVotlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;635&quot; height=&quot;260&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;꼭 알면 좋은 정규 표현식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1681941069017&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import re # 정규표현식 사용 모듈

# match 메서드 : 문자열의 처음 부분만 비교검색 대소문자 구분 re.match(패턴, 문자열)
re.match(r'life', 'life').group() # 매치된 내용을 반환하는 메서드.group()
'life'

# search 메서드 : 문자열 전체에서 패턴 찾기 모든 구간에서 비교 re.search(패턴, 문자열)
pattern = r'is' # 패턴에 지정해주고
script = 'Life is so cool' # 문자열에 지정해주고

re.search(pattern, script).group() # 지정한 변수로 찾으면 문자열 중간에 있는 패턴도 찾음
'is'

# findall 메서드 : 문자열 내에서 패턴을 모두 찾아 리스트(list)형식으로 반환 match와 search와는 다르게 찾지 못하면 빈 리스트 반환(에러를 안냄) re.findall(패턴, 찾으려는 문자열)
number = 'My number is 981223-1****** and yours is 991021-2******' # 문자열을 생성해주고
re.findall('\d{6}', number) # 위 문자열에 숫자(\d)를 6번 반복한 패턴이 있으면 찾아줘 
['981223', '991021']

# ly로 끝나는 단어 추출
sentence = 'I have a lovely dog, really. I am not telling a lie'       
re.findall('\w+ly', sentence) # 문자or숫자를 의미하는 \w 그리고 \w의 반복을 의미하는 +      
['lovely', 'really']

# 마침표와 물음표를 활용한 정규표현식 
example = '이동민 교수는 설명했습니다(이동민, 2019). 그런데 다른 학자는 다른 견해를 가지고 있었습니다(최재영, 2019). 또 다른 견해도 있었습니다(Lion, 2018).'        
re.findall(r'\(.+?\)', example) # \(로 시작하고 어떤문자든(.) 반복(+)되며 물음표(?)를 사용해 \)로 끝나는 문자열 찾으면 패턴 멈춤 반환       
['(이동민, 2019)', '(최재영, 2019)', '(Lion, 2018)']

# split 메서드 : 특정 패턴이 나올 때 문장을 분할 re.split(패턴, 문자열)
sentence = 'I love a lovely dog, really. I am not telling a lie. What a pretty dog! I love this dog.'        
re.split(r'[.?!]', sentence) # 마침표 물음표 느낌표 기준으로 문장을 분할        
['I love a lovely dog, really', ' I am not telling a lie', ' What a pretty dog', ' I love this dog', '']

data = 'a:3; b:4; c:5'

for i in re.split(r';', data): # ;을 기준으로 분할하고
        print(re.split(r':', i)) # :을 기준으로 또 분할해준다       
['a', '3']
[' b', '4']
[' c', '5']

# sub 메서드 re.sub(패턴, 바꿀문자, 문자열)
sentence = 'I love a lovely dog, really. I am not telling a lie. What a pretty dog! I love this dog.'        
re.sub(r'dog', 'cat', sentence) # dog를 cat으로 바꾸기        
'I love a lovely cat, really. I am not telling a lie. What a pretty cat! I love this cat.'

# sub 메서드로 공백지우기
words = 'I am home now. \n\n\nI am with my cat.\n\n' #'\n'은 줄바꿈 문자        
print(words)        
I am home now. 


I am with my cat.

re.sub(r'\n','', words)        
'I am home now. I am with my cat.'&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSV 파일이란&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Comma Separated Value : 쉼표(,)로 데이터를 분류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엑셀처럼 표로 볼 수 있는 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 텍스트 기반 형식으로 xls, xlsx 형식과 달리 서식 정보가 저장되지 않음&lt;/p&gt;</description>
      <category>전공공부/파이썬 (Python)</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/29</guid>
      <comments>https://hongjunwoo.tistory.com/29#entry29comment</comments>
      <pubDate>Thu, 20 Apr 2023 13:42:15 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 리스트 자료형에 대해</title>
      <link>https://hongjunwoo.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리스트명 = [요소1, 요소2, 요소3]&lt;/p&gt;
&lt;pre id=&quot;code_1681561808860&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3] 

&amp;gt;&amp;gt;&amp;gt; a
[1, 2, 3]

&amp;gt;&amp;gt;&amp;gt; a[0] #리스트 a의 첫 번째 요솟값
1

&amp;gt;&amp;gt;&amp;gt; a[0] + a[2] #요소의 값을 더한 것
4

&amp;gt;&amp;gt;&amp;gt; a[-1] #뒤에서 첫번째 요소(마지막 요소)
3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 인덱싱&lt;/p&gt;
&lt;pre id=&quot;code_1681567201360&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3, ['a', 'b', 'c']]

&amp;gt;&amp;gt;&amp;gt; a[0]
1

&amp;gt;&amp;gt;&amp;gt; a[-1]
['a', 'b', 'c']

&amp;gt;&amp;gt;&amp;gt; a[3]
['a', 'b', 'c']

&amp;gt;&amp;gt;&amp;gt; a[-1][0] #3번째 리스트에서 'a'값을 인덱싱을 사용해 끄집어냄
'a'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 슬라이싱&lt;/p&gt;
&lt;pre id=&quot;code_1681568231519&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3, 4, 5]
&amp;gt;&amp;gt;&amp;gt; a[0:2]
[1, 2]

&amp;gt;&amp;gt;&amp;gt; a = &quot;12345&quot;
&amp;gt;&amp;gt;&amp;gt; a[0:2]
'12'

&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3, 4, 5]
&amp;gt;&amp;gt;&amp;gt; b = a[:2]
&amp;gt;&amp;gt;&amp;gt; c = a[2:]
&amp;gt;&amp;gt;&amp;gt; b
[1, 2]
&amp;gt;&amp;gt;&amp;gt; c
[3, 4, 5]

&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
&amp;gt;&amp;gt;&amp;gt; a[2:5]
[3, ['a', 'b', 'c'], 4]
&amp;gt;&amp;gt;&amp;gt; a[3][:2]
['a', 'b']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 연산&lt;/p&gt;
&lt;pre id=&quot;code_1681571304030&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리스트 더하기(+)
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; b = [4, 5, 6]
&amp;gt;&amp;gt;&amp;gt; a + b
[1, 2, 3, 4, 5, 6]

# 리스트 반복하기(*)
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

# 리스트 길이구하기(len함수)
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; len(a)
3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 수정과 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1681571889759&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리스트에서 값 수정하기
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; a[2] = 4
&amp;gt;&amp;gt;&amp;gt; a
[1, 2, 4]

# 리스트 요소 삭제하기(del 함수)
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; del a[1]
&amp;gt;&amp;gt;&amp;gt; a
[1, 3]

&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3, 4, 5]
&amp;gt;&amp;gt;&amp;gt; del a[2:]
&amp;gt;&amp;gt;&amp;gt; a
[1, 2]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 관련 함수&lt;/p&gt;
&lt;pre id=&quot;code_1681576025674&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# append 요소 추가. 리스트의 맨 마지막에 추가한다.
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; a.append(4)
&amp;gt;&amp;gt;&amp;gt; a
[1, 2, 3, 4]

# sort 정렬. 숫자 알파벳 순서대로 정렬해준다.
&amp;gt;&amp;gt;&amp;gt; a = [1, 4, 3, 2]
&amp;gt;&amp;gt;&amp;gt; a.sort()
&amp;gt;&amp;gt;&amp;gt; a
[1, 2, 3, 4]

# reverse 뒤집기. 리스트를 역순으로 뒤집어준다.
&amp;gt;&amp;gt;&amp;gt; a = ['a', 'c', 'b']
&amp;gt;&amp;gt;&amp;gt; a.reverse()
&amp;gt;&amp;gt;&amp;gt; a
['b', 'c', 'a']

# index(x) 인덱스 반환. 리스트에 x값이 있으면 x의 인덱스 값을 리턴한다. 값이 없다면 오류발생.
&amp;gt;&amp;gt;&amp;gt; a = [1,2,3]
&amp;gt;&amp;gt;&amp;gt; a.index(3)
2
&amp;gt;&amp;gt;&amp;gt; a.index(1)
0

# insert 요소 삽입. insert(a,b)는 a번째 위치에 b를 삽입하는 함수.
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; a.insert(0, 4)
&amp;gt;&amp;gt;&amp;gt; a
[4, 1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; a.insert(3, 5)
&amp;gt;&amp;gt;&amp;gt; a
[4, 1, 2, 5, 3]

# remove 요소 제거. remove(x)는 첫 번째로 나오는 x를 삭제하는 함수.
&amp;gt;&amp;gt;&amp;gt; a = [1, 2, 3, 1, 2, 3]
&amp;gt;&amp;gt;&amp;gt; a.remove(3)
&amp;gt;&amp;gt;&amp;gt; a
[1, 2, 1, 2, 3]

# pop 요소 끄집어내기. pop()은 리스트의 맨 마지막 요소를 리턴하고 그 요소는 삭제된다. pop(x)는 리스트의 x번째 요소를 리턴하고 삭제한다.
&amp;gt;&amp;gt;&amp;gt; a = [1,2,3]
&amp;gt;&amp;gt;&amp;gt; a.pop()
3
&amp;gt;&amp;gt;&amp;gt; a
[1, 2]

&amp;gt;&amp;gt;&amp;gt; a = [1,2,3]
&amp;gt;&amp;gt;&amp;gt; a.pop(1)
2
&amp;gt;&amp;gt;&amp;gt; a
[1, 3]

# count 포함된 요소 x의 개수 세기. count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 개수를 리턴
&amp;gt;&amp;gt;&amp;gt; a = [1,2,3,1]
&amp;gt;&amp;gt;&amp;gt; a.count(1)
2

# extend 리스트 확장. extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a리스트에 x리스트를 더해준다.
&amp;gt;&amp;gt;&amp;gt; a = [1,2,3]
&amp;gt;&amp;gt;&amp;gt; a.extend([4,5])
&amp;gt;&amp;gt;&amp;gt; a
[1, 2, 3, 4, 5]
&amp;gt;&amp;gt;&amp;gt; b = [6, 7]
&amp;gt;&amp;gt;&amp;gt; a.extend(b)
&amp;gt;&amp;gt;&amp;gt; a
[1, 2, 3, 4, 5, 6, 7]&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python</category>
      <category>리스트자료형</category>
      <category>코딩</category>
      <category>파이썬</category>
      <category>프로그래밍</category>
      <author>홍강</author>
      <guid isPermaLink="true">https://hongjunwoo.tistory.com/28</guid>
      <comments>https://hongjunwoo.tistory.com/28#entry28comment</comments>
      <pubDate>Sun, 16 Apr 2023 01:27:41 +0900</pubDate>
    </item>
  </channel>
</rss>