대학교 98

자바 - (5) 참조 타입

참조 타입 출처 : 혼자 공부하는 자바 참조 타입에는 객체, 배열, 클래스 등이 존재한다. 기본 타입 변수와 참조 타입 변수의 차이점은 메모리 사용 영역에 있다. ​ 출처 : 혼자 공부하는 자바 참조 타입 변수의 경우 기본적으로 힙 영역에 주소를 가지며 참조하는 형태로 저장된다. ​ 출처 : 혼자 공부하는 자바 메소드 영역은 클래스 별로 정적 필드, 상수, 생성자 등을 분류해 저장한다. 힙 영역은 객체와 배열이 생성되는 영역이다. JVM 스택 영역은 메소드가 호출되면 프레임이 추가되고, 종료되면 프레임이 제거된다. 출처 : 혼자 공부하는 자바 JVM 스택 영역의 사진이다. 메소드를 호출할 때 스택 영역에 변화를 알 수 있다. 참조 타입 변수의 경우 스택 영역에 힙 영역에 생성된 객체의 주소를 가진다. 참..

대학교 2023.10.06

자바 -(4) 조건문과 반복문

조건문 조건식에 따라 다른 실행문을 실행하기 위해 사용한다. 대표적으로 if, switch문이 있다. 출처 : 혼자 공부하는 자바 if문은 보통 else if와 else를 같이 사용해 여러 조건식을 가진다. ​ 출처 : 혼자 공부하는 자바 switch문도 변수를 기준으로 case로 조건을 나누어 실행문을 진행하는 형태이다. 반복문 어떤 작업을 반복적으로 실행할 때 사용한다. 대표적으로 for, while, do-while문이 있다. 출처 : 혼자 공부하는 자바 for문은 기본적으로 초기값, 조건식, 증감식을 통해 반복을 진행한다. ​ 출처 : 혼자 공부하는 자바 while문은 조건식이 true이면 계속 루프를 돌며 실행문을 반복한다. 중간에 break나 조건식이 false가 되면 while문을 종료한다...

대학교 2023.10.06

데이터 구조 - (4) 연결 리스트

리스트 출처 : 쉽게 배우는 자료구조 with 파이썬 위와 같이 배열 리스트로 구현하는 것과 아래와 같이 연결 리스트로 구분하는 형식이 있다. 보편적으로 배열 리스트를 자주 사용하는데, 아래와 같은 객체 구조를 가진다. 출처 : 쉽게 배우는 자료구조 with 파이썬 배열 리스트 즉 내장 리스트는 한계를 가진다. 아래 사진과 같이 3번 원소에 추가하기 위해 뒤의 원소를 모두 shift한다. 즉 추가 혹은 제거할 때 이러한 불필요한 shift를 거치는 등 비효율적이다. 그렇기에 이를 해결할 연결 리스트를 사용하는 것이다. 출처 : 쉽게 배우는 자료구조 with 파이썬 연결 리스트 연결 리스트는 배열의 공간 낭비를 피할 수 있는 자료구조이다. 원소가 추가될 때마다 공간을 할당받아 추가하는 동적 할당 방식을 따..

대학교 2023.10.06

데이터 구조 - (3) 파이썬 기초

불변 타입과 가변 타입 출처 : 쉽게 배우는 자료구조 with 파이썬 id를 확인해보면 정수의 경우 값이 바뀌게 된다. 이는 불변이기에 그 자리에서 값을 바꿀 수 없어 다른 자리에 복사해 바꾼다. 리스트는 그 자리의 내용을 바꿀 수 있어 id값이 변하지 않는다. ​ (불변 : 숫자, 문자열, 튜플 가변 : 리스트) 복사호출, 참조호출, 할당호출 출처 : 쉽게 배우는 자료구조 with 파이썬 (a), (b)의 경우는 복사호출로 값이 복사되어 파라미터로 전달되는 형태다. (c), (d)의 경우는 참조호출로 그 값의 래퍼런스를 넘긴다. 그렇기에 결과적으로 단순 복사의 경우 x의 값이 5, 주소를 넘긴 경우 10의 결과가 나온다. ​ 출처 : 쉽게 배우는 자료구조 with 파이썬 할당 호출의 경우 불변 타입이면..

대학교 2023.10.06

자바 -(3) 입 출력, 연산자

출력 출력 : System.out ~ 출처 : 혼자 공부하는 자바 정해진 내용을 출력만 할거면 println 혹은 print 메서드를 사용하고, %d, %f 등의 형식문자열로 출력하려면 printf를 사용하면 된다. 형식 문자열의 예시를 아래와 같다. 출처 : 혼자 공부하는 자바 입력 입력 : System.in ~ 출처 : 혼자 공부하는 자바 read() 메서드를 사용할 경우 2개 이상 키가 조합된 한글을 읽을 수 없다. 그렇기에 Scanner를 자주 사용한다. 출처 : 혼자 공부하는 자바 이를 사용하기 위해서는 import java.util.Scanner;로 불러와줘야 한다. 또한 Scanner를 다 사용했으면 마지막에 close() 해줘야 한다. ​ 추가로 문자열의 값을 비교할 때는 "=="를 사용하..

대학교 2023.09.24

마이크로프로세서 - (4) ATmega128 보드

구성 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍​ 보드는 위와 같은 요소들로 구성되어 있다. ​ ISP 방식은 직접회로에 직접 연결하여 플래시 프로그램 메모리, EEPROM 등을 지우거나 프로그래밍하는 방법이다. 6핀 또는 10핀 커넥터를 주로 사용한다. 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍​ 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍​ ​ UART 통신은 병렬 데이터를 직렬로 바꾸어 전송하는 방식이다. 프로그램을 업로드 하거나 시리얼 통신을 위해 사용한다. 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍​ 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍​ 보드 종류 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍​ 출..

대학교 2023.09.22

마이크로프로세서 - (3) 레지스터

레지스터 - CPU 내부 레지스터 마이크로프로세서에서 사용되는 레지스터 프로그래머가 신경 쓰지 않아도 된다. ​ - CPU 외부의 레지스터 외부 장치와 데이터 교환 과정에서 필요한 레지스터 입출력 레지스터 : 소프트웨어와 하드웨어 사이에서 중개자 역할을 수행 ​ 레지스터는 8비트의 메모리 이며 실제 사용되는 것은 137개이다. 하나의 데이터 핀은 여러 가지 기능으로 사용된다. 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍 메모리 출처:ATmega128로 배우는 마이크로컨트롤러 프로그래밍 플래시 메모리는 프로그램 저장을 위한 하드디스트 기능을 수행한다. SRAM은 연산용, 컴퓨터의 메인 메모리 기능을 한다. EEPROM은 데이터를 영구보관할 때 사용한다. 출처:ATmega128로 배우는 마이크..

대학교 2023.09.21

한국 근현대사 - (2) 조선 -1

위화도 회군 조선은 1392년 이성계가 위화도 회군을 통해 개국했다. 조선 전에는 (고조선 -> 삼국시대 -> 통일신라 -> 고려)정도로 변해왔다. 그 때마다 (한나라 -> 수나라 -> 당나라 -> 송나라 ->원나라 ->명나라) 순으로 영향을 받는 국가가 달라졌는데, 조선은 명의 제후국이었다. ​ 중앙 집권적인 왕조국가로 양반 관료제, 엄격한 신분제, 노비제도, 유교, 사농공장 등의 특징을 가지고 있었다. 기본적으로 명의 영향을 받다보니, 폐쇄적이고 충성, 효 등을 중시했다. 출처 : 맨체스터 유나이티드 - The Red Devils : 네이버 카페 (naver.com) 전쟁 1592년~1598년까지 임진왜란이 일어났다. 이 때 일본의 공격으로 조선의 국력이 약해졌다. ​ 또한 1636년~1637년까지 ..

대학교 2023.09.20

데이터 구조 - (2) 알고리즘의 성능

입력의 크기 출처 : 쉽게 배우는 자료구조 with 파이썬 각 알고리즘 마다 수행 시간이 다르다. 입력의 크기가 작으면 알고리즘 마다의 시간 차이도 적어서 괜찮은 경우가 많지만, n의 크기가 커질수록 그 시간 차이도 상당히 커지기에 알고리즘의 성능이 중요해진다. ​ 출처 : 쉽게 배우는 자료구조 with 파이썬 위와 같이 1번째는 n이 엄청 커져도 결국 나누기 2를 하기에 상수 시간이 걸린다. 2번째 경우는 n이 커질수록 for문의 반복횟수가 늘기에 n에 비례한다. 3번째 경우는 n이 커질수록 이중 for문과 수행시간을 확인해보면 n(n-1)/2로 n제곱에 비례한다. 알고리즘 복잡도 점근적 복잡도 : 입력의 크기가 충분히 클 때의 복잡도 출처 : 쉽게 배우는 자료구조 with 파이썬 차례대로 위의 기호는..

대학교 2023.09.20

파이썬 - (2) 함수 실습

함수 실습 실습 1 저번에 배웠던 휴보라는 로봇을 이용해 4가지 실습을 진행했다. 파이썬 hubo라는 키워드를 통해 정보를 얻을 수 있다. 이 포스팅에서 실습 1번과 3번을 다루려고 한다. 첫 번째는 지그재그 방식으로 (1,1)에서 (10,1)까지 이동하는 것이다. #제공받은 코드 from cs1robots import* #Task1 create_world() hubo = Robot() #이동한 위치 파란색으로 기록 hubo.set_trace("blue") #왼쪽으로 방향 전환 hubo.turn_left() #오른쪽으로 방향 전환 def turn_right(): hubo.turn_left() hubo.turn_left() hubo.turn_left() #위로 지그재그 def zigzag(): for _ ..

대학교 2023.09.19