본문 바로가기

문법관련40

파이썬 고급 문법(class~모듈과 패키지) 클래스 (class)클래스는 객체 지향 프로그래밍에서 객체를 정의하는 틀이다. 클래스는 데이터(멤버변수)와 함수(메소드)를 포함할 수 있다. 클래스는 여러 객체를 생성할 수 있는 청사진 역할을 한다.class Person: def __init__(self, name): self.name = name def greet(self): print(f"Hello, my name is {self.name}") 생성자생성자는 클래스의 인스턴스가 생성될 때 호출되는 함수이다. 객체의 초기 상태를 정의하는 데 사용된다.class Person: def __init__(self, name): self.name = name # 초기화할 때 전달받은 값을 멤버 변수에 저장.. 2024. 9. 13.
파이썬 중급 문법 (함수~with) 함수def add(a, b): # 전달값 - a, b return a + b # 반환값 - return 키워드result = add(3, 5)  기본값: 기본값이란 함수의 인수에 미리 값를 설정해 두는 것이다. 따라서 함수 호출 시 값을 전달하지 않아도 기본값으로 출력되어 오류가 생기지 않는다. def greet(name="Guest"): return f"Hello, {name}!"print(greet()) # Hello, Guest!print(greet("John")) # Hello, John!  키워드값매개변수가 여러 개이고, 기본값으로 모두 설정된 상태에서 특정 매개변수의 값만 변경하고 싶다면 키워드 값을 사용하면 된다.def get_price(is_vip=False, .. 2024. 9. 13.
파이썬 초급 문법2 (if~리스트 컴프리핸션) if문if 조건문: 수행할 문장 수행할 문장 ....elif 조건문: 수행할 문장 수행할 문장 ...else: 수행할 문장 수행할 문장 ....  for 반복문for 변수 in 리스트(또는 튜플, 문자열): 수행할_문장1 수행할_문장2 ... # 예시 - 1>>> test_list = ['one', 'two', 'three'] >>> for i in test_list: ... print(i)... one two three# 예시 - 2>>> a = [(1,2), (3,4), (5,6)]>>> for (first, last) in a:... print(first + last)...3711# 예시 - 3>>> str = '.. 2024. 9. 13.
파이썬 초급 문법 (슬라이싱~ 자료형 변환) 슬라이싱슬라이싱이란, 어디부터 : 어디까지를 추출해주는 것이다.정확히 말하면 어디부터 : 어디 직전까지 이다.a = [1, 2, 3, 4, 5]print(a[1:3]) #[2, 3]print(a[:3]) #[1, 2, 3]  문자열 처리# [문자열 더하기]snack = '꼬깔콘'num = '2개'plz = snack + num # 꼬깔콘 2개plz += '주세요'# 꼬깔콘 2개 주세요.# [여러줄 문자 만들기]snack = ''' 꼬깔콘은너무 맛있는 과자'''# 꼬깔콘은# 너무# 맛있는 과자  문자열 메소드 zfill()숫자의 길이를 맞추기위해 앞쪽에 0을 채움replace(바꿀값,새로운값)문자열을 찾아서 새로운문자열로 바꿈strip('삭제할문자들')양쪽에 지정한 문자를 삭제하거나 공백을 삭제rstrip.. 2024. 9. 13.
파이썬 기초 문법 (자료형 ~ 불리안) 자료형intfloatstringbolllsit: [] -> 수정 가능 / 연산 속도 下tuple: () -> 수정 불가능 / 연산 속도 上dict: {}Nonex = 30y = 0.134s = 'string'bool = Trueli = [10, -324.33, 'a', "bbb"]tup = (10, -233.33, '안녕', "KK")dict = {"a": 1, "b": "둘", 'c': "3"}nothing = None  변수변수 이름 = 값#[예시]a = 10b = "hello"c = True 다른 언어들과 다르게 따로 타입명을 명시하지 않아도 파이썬이 입력 값에 따라 자동으로 타입을 파악한다. 변수명문자 또는 _로 시작 - ex) name, _name문자, 숫자, _로 구성 - ex) name123.. 2024. 9. 13.
14.2 포인터 배열 포인터 배열포인터 복습char *ap = "dog";char *bp = "elephant";100 ap ['d'|'o'|'g'|'\\0']  포인터 배열의 예시     포인터를 배열로 만들면 좋은점?→ 반복문 사용으로 여러 포인터에 접근이 가능해진다.→ 즉, 반복문으로 다른 배열 여러 개를 한번 접근할 수 있다.     위의 그림처럼 ap라는 포인터 배열이 있고, 각각 a, b, c라는 배열이 있다고 했을 때 각각 포인터 배열에 각 배열의 시작 주소를 넣으면 아래와 같아진다.   이렇게 포인터 배열이 만들어지면 각각의 다른 배열의 요소에 간단한 반복문을 통해 접근이 가능하다. for(i=0; i 2024. 8. 7.
14.1 다차원 배열 다차원 배열의 형태int score[3][4]라는 다차원 배열을 시각화하면 아래와 같다.[ | | | ][ | | | ][ | | | ]배열명[i][j]은 배열요소가 j개짜리인 배열이 i개 있는 것과 같다.다차원 배열의 주소 100 104 108 112 [ | | | ] 116 120 124 128 [ | | | ] 132 136 140 144 [ | | | ]다차원 배열의 요소[ s[0][0] | s[0][1] | s[0][2] | s[0][3] ][ s[1][0] | s[1][1] | s[1][2] | s[1][3] ].. 2024. 8. 7.
13. 변수 [지역 변수(자유 변수)]→ 일정 지역에서만 사용 가능한 변수특징지역 변수는 사용 범위가 블록 내부로 제한되므로 다른 함수에서는 사용할 수 없다.지역 변수는 이름이 같아도 선언된 함수가 다르면 각각 독립된 저장 공간을 갖는다.장점메모를 효율적으로 사용한다.지역 변수는 함수 내부에서 사용되기 때문에 함수가 반환되면 저장 공간을 계속 유지할 필요가 없다.디버깅에 유리하다.지역 변수는 값에 문제가 있을경우 수정하기 쉽다.주의할 점. 지역 변수가 할당된 저장 공간은 자동 초기화가 안되기때문에 쓰레기 값을 사용하지 않도록 주의해야한다.[전역 변수]→ 프로그램 전체에서 사용가능한 변수→ 함수 밖에서 선언#include assign10();assign20();int a; //1번 aint main() { pri.. 2024. 7. 4.
12.2 문자열 연산함수 [strcpy]→ 문자열을 대입하는 함수strcpy(대입돨 문자열의 베얄명, 대입할 문자열) 🔺 🔺 복사할 곳 복사할 내용 //예시char str1[20] = "apple";strcpy(str1, "mango");문자열은 그 문자열의 주소이다.즉, strcpy 인자는 주소두개를 받아서 실행하는 함수이다. 따라서 아래와 같이 두 번째 인자에 주소인 배열을 넣어서 실행시킬 수 있다.strcpy(대입될 문자열의 베얄명, 대입할 문자열의 베얄명) 🔺 🔺 복사할 곳 복사할 내용 //예시 char str1[20] = "apple";char str2[20] = "man.. 2024. 6. 27.
12.1 문자열과 포인터 컴파일러가 문자열을 처리하는 방식문자열을 별도의 메모리 공간에 따로 저장해둔다.첫 번째 문자의 메모리 공간의 주소를 100이라고 치면 문자열이 사용된 위치에는 100을 치환을 해서 사용한다.이를 증명하는 예시는 아래와 같다.#include int main() { printf("%c", *"apple"); return 0;}//결과//aapple을 간접 참조 연산자를 달아서 출력하면 * (첫 번째 문자 주소) 이와 같이 되기 떄문에 첫 번째 문자인 a가 출력된다.  응용편1#include int main() { printf("%c", *("apple" + 1)); return 0;}//결과//p// [풀이]100 101 102 103 104 105 [ a | p | p | l | l.. 2024. 6. 26.
11.3 getchar(), putchar() putchar()역할: 한 문자를 출력합니다.사용법: putchar(문자);예시: #include int main() { char ch = 'A'; putchar(ch); // 'A'를 출력합니다. return 0;}getchar()역할: 한 문자를 입력받습니다.사용법: 문자 변수 = getchar();예시: #include int main() { char ch = 'A'; putchar(ch); // 'A'를 출력합니다. return 0;}요약putchar(): 한 문자를 출력할 때 사용합니다.getchar(): 한 문자를 입력받을 때 사용합니다.이 두 함수는 문자 단위로 입출력을 처리할 때 유용하며, 특히 간단한 프로그램에서 자주 사용됩니다. 2024. 6. 26.
11-2. 버퍼를 이용하는 입력 함수 scanf 함수가 문자를 입력하는 과정#include int main(){ char ch; int i; for(i=0; i   위처럼 나오는 이유?→ scanf로 데이터를 입력하면 버퍼에 저장한 후 첫 번째 문자만 변수 ch에 저장한다. 또 다음 scanf 함수가 호출되면 두 번째 문자인 i를 변수ch에 저장하고 세 번째도 마찬가지로 g를 저장한다. 그후 저장된 변수를 출력한다.버퍼란? 프로그램 실행 중에 운영체제가 자동으로 할당하는 메모리의 저장공간이다.그렇다면 어떤 입력에도 전부 다 출력해주려면 어떻게 해야할까?#include int main(){ char ch; int i; scanf("%c", &ch); while(ch1!='\n'){ printf.. 2024. 6. 25.
11-1. 아스키코드 [아스키코드]   ‘a’를 컴파일하면 약속된 정수 값인 아스키 코드 값으로 바뀌어 정수 값 97로 아래와 같이 메모리에 저장된다.[ 00000000 | 00000000 | 00000000 | 01100001 ]sizeof('a') //4자 이제는 char형에 문자를 넣고 탐색해보자.char ch; //1bytech = 'a'; // [ 01100001 ] 즉, ch = 97;과 같다.ch = ch + 1; // b소문자를 대문자로 변경 char ch = 'b'; char CH; CH = ch - ('a' - 'A'); // B아스키코드에서 같은 알파벳의 소문자가 대문자보다 32가 크다. 따라서 소문자에서 32를 뺴주면 대문자로 변경이된다.모든 알파벳 출력하기char ch = 'a';while(ch 2024. 6. 25.
10. 배열과 포인터 int ary[5]; 100 104 108 112 116 -> [ int | int | int | int | int ]배열은 첫 번째 요소의 주소만 알면 나머지 요소의 주소도 모두 알 수가 있다.컴파일러는 첫 번째 배열 요소의 주소를 쉽게 사용하도록 배열명을 컴파일 과정에서 첫 번째 배열 요소의 주소로 변경한다.즉, ary == 100  배열명으로 배열 요소 사용하기[더하기]ary배열의 첫 번째 값은 ary로 쓸 수 있지만 나머지 배열 요소들은 접근할 수 없다.따라서 연산을 통해서 나머지 요소에 접근해보자.ary + 1 // 104위의 값이 101이 아니라 104가 나온 이유는 1은 주소 값에 +1을 해주는 것이 아니라 ary의 자료형의 1바이트 만큼의 수를 더해주는 것이다.따라서 1은 .. 2024. 6. 24.
9. 포인터 메모리의 주소int a; //메모리 공간 확보a = 10; // 값 저장[ 0 | 0 | 0 | 10 ] 100 101 102 103 우리는 이전까지 확보된 메모리를 사용할 때 변수 명으로 접근해왔다.하지만 메모리 주소 값을 통해 메모리에 접근할 수 있는 방법이 있는데 그게 바로 주소 연산자이다.주소 연산자(&):메모리 주소 값을 통해 메모리에 접근하는 방법&a // == 100#include int main(){ int a; printf("a의 메모리 주소 값은 %p입니다.", &a); //%p는 16진수를 나타내는 연산자 return 0;}// 출력// a의 메모리 주소 값은 0x16b653248입니다.위 방식처럼 주소 연산자를 사용하면 메모리에 접근할 수.. 2024. 6. 18.
8. 함수 함수의 선언과 정의 //함수의 선언반환값 자료형 함수명(매개변수1 자료형 매개변수명1, 매개변수2 자료형 매개변수명2);int main(){}//함수의 정의반환값 자료형 함수명(매개변수1 자료형 매개변수명1, 매개변수2 자료형 매개변수명2){ //함수가 수행하는 명령}예시int sum(int a, int b){ int res; res = a + b; return res;}sum(10, 20); //30 여러가지 함수 유형 1. 매개 변수가 없는 함수//양수를 출력하는 함수int get_pos(){ int num; scanf("%d", &num); if(num  2. 반환 값이 없는 함수: 화면에 출력을 하는 경우 등등//반복되는 문자 출력print_char(char .. 2024. 6. 14.
7. 반복문 - do while 형식do{ //반복할 행동}while(조건);while문과 do while문의 차이점 → while문의 조건이 거짓이라면 while문 내부에 있는 행동을 실행 되지 않는다. 하지만 do while문은 조건이 거짓이라도 행동보다 아래에 while문이 있기 때문에 한번은 실행한다. 2024. 6. 13.
6. 연산자 / 연산자와 % 연산자의 차이/는 몫을 나타내고 %는 나머지를 나타낸다.// --- / ---int a = 5;int b = 2;printf("%d 나누기 %d = %d", a, b, a/b);//--출력--// 5 나누기 2 = 2 위 처럼 정수끼리 나눠주면 정수 값만 출력한다. 따라서 실수 값으로 출력하고 싶다면 실수끼리 나눠줘야한다.// --- / --- double a = 5.0; double b = 2.0; printf("%.1lf 나누기 %.1lf = %.1lf", a, b, a/b);//--출력--// 5.0 나누기 2.0 = 2.5 증감 연산자int a,b = 10;++a; // 해당 코드는 a = a + 1; 과 같다. 따라서 11--b; // 해당 코드는 b = b + 1; 과 같다. .. 2024. 6. 12.
5. scanf 함수 정수형 입력하기정해진 값이 저장된 변수만 사용하는 것이 아니라 사용자가 직접 입력해서 변수의 값을 지정할 수 있다.그건 바로 scanf라고 한다.int main(){ int a; scanf("%d", &a); return 0;}&를 사용하는 이유 → &(앰퍼센트)를 사용하는 이유는 저장할 변수의 이름만으로 해당 변수 메모리에 접근할 수 없기 때문에 &을 사용해서 저장할 변수의 메모리 주소값을 가져와 저장한다.  ❗️주의사항❗️scanf 함수에서 변수명을 지정할 떄는 &을 붙여야한다.scanf 함수에서 사용한 변환 문자와 맞는 형태의 데이터를 입력해야한다.int형 → %dchar형 → %cdouble형 → %lf정수를 다수 입력을 할 때아래와 같이 여러 개가 입력될 때는 space, enter.. 2024. 6. 10.
4-2. 자료형 마다 저장할 수 최대값과 최솟값 [최대값과 최솟값의 공식] (unsigned는 제외)최대값: 2^비트수최솟값: -2^비트수 Data TypeStorage Size (bytes)Minimum Value Maximum ValueFormat Specifierchar1-128127%cunsigned char10255%cshort2-3276832767%hdunsigned short2065535%huint4-21474836482147483647%dunsigned int404294967295%ulong4-21474836482147483647%ldunsigned long404294967295%lulong long8-92233720368547758089223372036854775807%lldunsigned long long8018446744073709.. 2024. 6. 3.
4. 변수 선언 및 초기화 쓰레기 값메모리 내부에는 쓰레기 값이 저장되어있다.→ 메모리는 우리만 사용하는 것이 아니라 다른 프로그램들이 사용하기도 하는데 그때 사용되고 남겨진 값들을 쓰레기 값이라고 한다.  int변수 선언 및 초기화int main() { int a;} 위처럼 변수를 선언하면 int형은 4바이트이기 때문에 아래와 같이 메모리가 생성된다.[ | | | ] 100 101 102 103 int main() { int a; a = 10;} 따라서 우리는 쓰레기 값을 없애고 다른 값을 넣어줘야한다. 이게 바로 초기화라고 한다. [ 0|0|0|0|0|0|0|0 | 0|0|0|0|0|0|0|0 | 0|0|0|0|0|0|0|0 | 0|0|0|0|1|0|1|0 ] 100 .. 2024. 6. 3.
3. 상수와 데이터 표현방법 정수: -2, -1, 0, 1, 2 ….실수: 0.1, 0.2, 0.3진법 기수 (Base) 사용 숫자 예시 (10진법 숫자 42의 표현) 설명 프로그래밍 표기(42)10진법100, 1, 2, 3, 4, 5, 6, 7, 8, 942일반적으로 사용하는 숫자 체계428진법80, 1, 2, 3, 4, 5, 6, 7528을 기수로 하는 숫자 체계05216진법160, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F2A16을 기수로 하는 숫자 체계0x2A2진법20, 11010102를 기수로 하는 숫자 체계 각 진법의 변환 예시10진법 (Decimal, Base 10)사용 숫자: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9예시:10진법 숫자 **42**는 4 * 10^1 + 2 .. 2024. 5. 31.
2. printf - 형식지정자와 이스케이프 시퀀 [% 형식 지정자]형식 지정자 설명 예시 출력 예시%d부호 있는 10진 정수 출력 (int)printf("%d", 42);42%f소수점 이하 6자리까지 표시하는 소수점 표기 실수 (float, double)printf("%f", 3.14);3.140000%e지수 표기법으로 실수 출력, 소문자 (float, double)printf("%e", 3.14);3.140000e+00 [이스케이프 시퀀스]이스케이프 시퀀스 설명 예시 출력\\백슬래시(\) 자체를 출력printf("This is a backslash: \\");This is a backslash: \\n새 줄printf("First line.\nSecond line.");First line.Second line.\t수평 탭printf("Column1\.. 2024. 5. 31.
1. 비트와 바이트 1. 비트 (Bit):비트는 데이터의 가장 작은 단위입니다.비트는 0 또는 1의 값을 가집니다.8개의 비트가 모여 1바이트를 구성합니다.[ 0 ] or [ 1 ]  2. 바이트 (Byte):바이트는 8비트로 구성된 데이터 단위입니다.바이트는 하나의 문자를 표현하거나, 작은 범위의 숫자를 나타낼 수 있습니다.[ 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 ] -> 1 Byte  3. 자료형 별 바이트 수char8short16int32long32long long64float32double64long double80 2024. 5. 31.
제너릭 기초(Generic) 정의 💡 Generic: 포괄적인 우리가 사용한는 Swift 표준 라이브러리의 대부분은 제너릭으로 작성되어있다. 그 예시로 Swift의 배열, 딕셔너리가 있다. 예시 제너릭을 좀 더 쉽게 이해하기 위해서 예시를 보자. 아래에 있는 함수는 함수 이름 그대로 정수형 변수 두개의 값을 서로 바꿔주는 함수이다. func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } 하지만 해당 함수를 작성하고 String형의 변수 두개의 값을 서로 바꿔주기 위해서는 또 다시 swapTwoStrings라는 함수를 만들어야한다. Double도 마찬가지로 또 함수를 만들어야한다. 이렇게 하면 잘 작동은 되겠지만 3개의 함수.. 2022. 8. 26.
where 키워드를 이용한 반복문 제어 - 정대리 인프런 우선 우리가 알고 있는 반복문은 아래와 같다. import UIKit var myArray : [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for item in myArray { print("item: \(item)") } // item: 0 item: 1 item: 2 ... 해당 코드는 "myArray라는 Int 배열을 item이라는 곳에 담아서 반복문을 통해서 출력시키겠다." 라는 의미이다. 만약 반복문을 사용할 때 특정한 조건에서 반복을 하고 싶다면 어떻게 해야할까? 그럴 때는 where이라는 키워드를 사용해서 조건을 걸어주면 된다. import UIKit var myArray : [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for .. 2022. 6. 22.
Protocol (Yagom) 프로토콜 프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저등의 요구사항을 정의한다. (특정 기능이나 속성에 대한 설계도) 쉽게 말하면, 어떤 타입(구조체, 클래스, 열거형)에 "너는 이 기능이 꼭 필요해. 그러니깐 이 기능을 꼭 구현해!" 라고 강요하는 것과 같다. 구조체, 클래스, 열거형은 프로토콜을 채택해서 프로토콜의 요구사항을 실제로 구현할 수 있다. (여기서 채택이란, 어떤 타입이 "나는 이 기능을 수행할거야" 라고 말하는 것) 프로토콜의 정의 protocol 프로토콜 이름 { // 정의부 } 예시를 통해서 살펴보자. //말할 수 있다 라는 기능을 프로토콜로 나타낸 것 protocol Talkable { var topic: String { get set } var laungua.. 2022. 6. 1.
값 타입과 참조 타입( 클래스와 구조체 ) 값 타입(Value) 데이터를 전달할 때 값을 복사하여 전달하는 것 즉, 전달 받은 값을 변경해도 원본 값은 영향을 받지 않는다. 값타입의 예시) 열거형 구조체 배열 문자열 딕셔너리 튜플 따라서 구조체 또는 열거형은 값 타입이다. 값 타입 속성은 기본적으로 인스턴스 메서드 내에서 수정할 수 없기 때문에 "mutating" 키워드를 작성한다. 참조 타입(Reference) 데이터를 전달할 때 값의 메모리 위치를 전달하는 것 즉, 전달 받은 값을 변경하면 원본 값도 변경된다. 참조 타입의 예시) 클래스 클로저 함수 2022. 6. 1.
클로저 (꼼꼼한 재은 씨의 Swift : 문법편 + babbab2) ㅇ출처: 꼼꼼한 재은 씨의 Swift : 문법편 + babbab2티스토리 클로저는 함수에 대해서 알고 배우는 편 좋기때문에 함수를 다 이해하고 살펴보자. Closure 란? 클로저란 보통 익명의 함수, 일회용 함수를 작성할 수 있는 구문이다. 이전에 배운 함수또한 클로저에 속한다. 무슨 말이냐면 클로저는 아래의 사진과 같이 두 종류의 클로저가 있다. 위의 사진에서 Named 클로저는 우리가 앞서 배운 아래의 코드와 같은 함수이다. (클로저이지만 그냥 함수라고 부를 뿐이다.) func doSomething() { print("Somaker") } 그리고 Unnamed 클로저는 앞으로 배울 Closure를 뜻한다. let closure = { print("Somaker") } Swift에서 클로저라고 부르는.. 2022. 5. 26.
함수(2) (꼼꼼한 재은 씨의 Swift : 문법편) 일급 객체로서의 함수 Swift는 함수형 패러다임을 따르고 있다. 즉, Swift라는 언어는 일급 객체에 부합하는 언어이다. 일급 함수의 특성 1. 객체가 런타임에도 생성이 가능해야 한다. 2. 인자값으로 객체를 전달할 수 있어야한다. 3. 반환값으로 객체를 사용할 수 있어야한다. 4. 변수나 데이터 구조안에 저장할 수 있어야한다. 5. 할당에 사용된 이름과 관계없이 고유한 구별이 가능해야한다. 함수가 위 조건을 만족하는 프로그래밍 언어는 함수형 언어가 되며, 함수형 프로그래밍에서는 "함수가 일급 객체"가 될 수 있다. 아래의 몇가지 예시를 통해서 Swift가 왜 함수형 언어이고 왜 일급 객체인지에 대해서 알아보자. 일급 함수의 특성 (1) - 변수나 상수에 함수를 대입할 수 있다. 변수나 상수에 함수를.. 2022. 5. 26.