객체 지향 프로그래밍 시작하기

객체란?

객체란? 속성과 행동으로 이뤄진 존재입니다. 다시 말해서, 이 세상에 존재하는 모든 것들, 모든 것들이 객체가 될 수 있다.

객체지향 프로그래밍이란?

정의: 프로그램을 여러 개의 독립된 객체들과 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법이다.
요약: 프로그램을 객체들과 객체들 간 소통으로 바라보는 것

객체지향적으로 설계했다 -> 모델링했다.
객체지향프로그래밍으로 프로그램을 만들려면

  1. 프로그램에 어떤 객체들이 필요한지 정한다.
  2. 객체들의 속성과 행동을 정한다.
  3. 객체들이 서로 어떻게 소통할지 정한다.

객체를 만드는 법

클래스와 인스턴스

객체의 틀을 만들어서 객체를 만든다.
객체의 틀 = 클래스 / 결과물 = 객체
클래스로 객체를 만든다. 클래스로 인스턴스를 만든다. (객체 = 인스턴스)

class User:
    pass

# 서로 다른 인스턴스
user1 = User()
user2 = User()
user3 = User() 
인스턴스 변수
# 인스턴스 변수 정의하기
# 인스턴스이름.속성이름 = '속성에 넣을 값'

user1.name = '김대위'
user1.email = 'captain@codeit.kr'
user1.password = '12345'

user2.name = '강영훈'
user2.email = 'younghoon@codeit.kr'
user2.password = '98765'

user3.name = 'jake'
user3.email = 'jake@codeit.kr'
user3.password = '78965'
# 인스턴스 변수 사용하기 # 인스턴스이름.인스턴스변수이름 print(user1.email) print(user2.password)
인스턴스 메소드
인스턴스 메소드의 특별한 규칙
self사용하기
인스턴스 변수와 같은 이름을 갖는 파라미터
int메소드
str메소드
클래스변수
클래스메소드

미리 알아야 할 것들

객체 만들기 연습

객체 지향 프로그래밍 직접 해보기


파이썬 모듈 맛보기

모듈
# 같은 폴더 안에 있는 파일만 불러올 수 있음. 이를 모듈이라고 지칭한다.
# calculator 라는 모듈을 calc라 지칭해서 사용하겠다.
import calculator as calc 

# 모듈 사용 법
print(calc.add(2, 5))
print(calc.multiple(3, 4))


# 칼큘레이터 모듈에서 저 함수만 가져와서 사용한다는 뜻
from calculator import add, multiple 
print(add(2,5))
print(multiple(3,4))
스탠다드 라이브러리
# standard library

# 수학 관련 기능들을 모아 놓은 라이브러리
import math

print(math.log10(100))
print(math.cos(0))
print(math.pi)

# 랜덤 값을 만들고 싶을 때 사용하는 라이브러리
import random
print(random.random())

# Operating System (운영체제)
import os

print(os.getlogin())
print(os.getcwd())

사용자 입력 받기

input

사용자의 입력을 받기 위해서는 input()함수를 사용하면 됩니다.

name = input("이름을 입력하세요: ")
print(name)

파일 읽고 쓰기

파일 읽기
파일 쓰기
strip

화이트스페이스를 제거하는 함수

split
#split
full_name = "Kim, Yuna"
print(full_name.split(', '))

프로젝트 : 로또 시뮬레이션

프로젝트 : 숫자 야구

 

리스트

리스트

리스트에서 요소의 위치를 인덱스라고 하며, 인덱스를 통해 요소를 받아 오는걸 '인덱싱'이라고 합니다.
리스트의 인덱스는 0번부터 시작합니다. *추가로 인덱스는 -를 사용하여서 인덱싱할 수 있습니다.

# List (리스트)
numbers = [2,3,4,5,6,7,11]
names = ['jake','성재','KIM']

print(numbers)
print(names)

# Indexing (인덱싱)
print(names[1])
print(names[0] + names[1] + names[2])
print(numbers[1] + numbers[3])

# List Slicing (리스트 슬라이싱)
numbers[0:4] # 인덱스 0부터 3까지 짜른다.
print(numbers[0:4])
print(numbers[:3])
print(numbers[2:5])

# 인덱스 변경하기
print(numbers)
numbers[0] = 7
print(numbers)
리스트 함수
# 리스트 길이 재기
# len
print(len(numbers))
lists = []
# 인덱스 추가하기 
# append
lists.append(5)
lists.append(8)
print(lists)
print(len(lists))
# 인덱스 삭제하기
# del
numbers = [2,3,4,5,6,7,11]
del numbers[3] # 인덱스 3번 삭제
print(numbers)
# 특정 위치에 인덱스 삽입하기
numbers.insert(4, 37)
print(numbers)
리스트 정렬
# 리스트 정렬
numbers = [19, 13, 2, 5, 3, 11, 7, 17]
# 방법1 sorted
# sorted함수는 기존 리스트는 건드리지 않고, 정렬된 새로운 리스트 리턴 
new_list = sorted(numbers)
print(numbers)
print(new_list)
# 방법1-1 reverse
new_list = sorted(numbers, reverse=True)
print(new_list)

# 방법2 sort
# sort함수는 아무것도 리턴하지 않고, 기존 리스트 정렬
print(numbers.sort()) # None
numbers.sort()
print(numbers)
numbers.sort(reverse=True)
print(numbers)

for반복문

for 반복문

while 반복문과 for반복문은 상황에 따라 맞는 깔끔한 코드를 쓸 수 있다.

# for 반복문
# for i in []:
#     수행부분

Range 함수

range는 파라미터 1, 2, 3 버전이 있습니다.
range함수의 장점은 간편하고, 깔끔하다는 점 / 컴퓨터의 메모리를 효율적으로 사용한다는 점입니다.

사전

여러 값을 모아 놓을 수 있는 자료형으로, 파이썬에서는 사전(dictionary)이 있습니다. "key-value pair"
리스트와 사전의 차이점은 순서라는 개념차이가 있고, 사전의 키는 정수형일 필요가 없습니다.

# 사전 (Dictionary)
# key-value Pair

my_dictionary = {
    5: 25,
    2: 4,
    3: 9
}

print(type(my_dictionary))

print(my_dictionary[3])
print(my_dictionary[5])

# 사전 값 추가
my_dictionary[9] = 81
print(my_dictionary)

my_family = {
    '나': 'jake',
    '회사': 'codeit'
}

print(my_family)

사전 활용
# 사전 활용법

my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}

print('성태호' in my_family.values())

for value in my_family.values():
    print(value)
for key in my_family.keys():
    print(key) 

for key in my_family.keys():
    value = my_family[key]
    print(key, value)

for key, value in my_family.items():
    print(key, value)

파이썬 데이터의 비밀

Aliasing (가명: alias)

파이썬에서 어떤 값을 변수에 저장하면 이름표를 주는 것과 같습니다.

리스트와 문자열

리스트와 문자열은 매우 유사한 구조를 가지고 있습니다. 리스트는 어떤 자료형을 나열한 것이라면, 문자열은 문자를 나열한 것이라고 볼 수 있습니다.

  1. 리스트의 인덱싱처럼, 문자열도 인덱싱을 할 수 있습니다.
  2. 리스트 슬라이싱처럼, 문자열도 슬라이싱을 할 수 있습니다.
  3. 문자열을 연결하듯, 리스트도 연결할 수 있습니다.
  4. len함수로 리스트의 길이를 확인할 수 있는 것처럼, len함수로 문자열의 길이를 확인할 수 있습니다.

다른점

  1. 리스트는 특정 인덱스를 변경할 수 있는데, 문자열은 특정 인덱스를 변경할 수 없습니다.

  1. 학점 계산기

학생들에게 최종 성적을 알려 주는 '학점 계산기'를 만들려고 합니다.

이 수업에는 50점 만점의 중간고사와 50점 만점의 기말고사가 있는데요. 두 시험의 점수를 합해서 최종 성적을 내는 방식입니다. 규칙은 다음과 같습니다.

  • A: 90점 이상
  • B: 80점 이상 90점 미만
  • C: 70점 이상 80점 미만
  • D: 60점 이상 70점 미만
  • F: 60점 미만

print_grade 함수는 파라미터로 중간고사 점수 midterm_score와 기말고사 점수 final_score를 받고, 최종 성적을 출력합니다.

def print\_grade(midterm\_score, final\_score):  
    total = midterm\_score + final\_score  
    # 여기에 코드를 작성하세요  
    if total >= 90:  
        print("A")  
    elif total >= 80:   
        print("B")  
    elif total >= 70:  
        print("C")  
    elif total >= 60:  
        print("D")  
    else:  
        print("F")  
# 테스트 코드  
print\_grade(40, 45)  
print\_grade(20, 35)  
print\_grade(30, 32)  
print\_grade(50, 45)
  1. 이상한 수학 문제 1
    while문과 if문을 활용하여, 100 이하의 자연수 중 8의 배수이지만 12의 배수는 아닌 것을 모두 출력하세요.
    예를 들어서 16은 8의 배수이지만 12의 배수가 아니니까 조건에 부합합니다. 하지만 48은 8의 배수이면서 12의 배수이기도 해서 조건에 부합하지 않습니다.
    실행하면 콘솔에 아래와 같이 출력되어야 합니다.

    i = 1
    while i <= 100:
     if i % 8 == 0 and i % 12 != 0:
         print(i)
     i += 1
  2. 이상한 수학 문제 2
    10보다 작은 2 또는 3의 배수는 2, 3, 4, 6, 8, 9이며, 이들의 합은 32입니다.
    while문과 if문을 활용하여, 1,000보다 작은 자연수 중 2 또는 3의 배수의 합을 출력하는 프로그램을 써 보세요.

    total = 0;
    i = 1
    

while i < 1000:
if i % 2 == 0 or i % 3 == 0:
# print(i) #2 3 4 6 8 9
total += i
i += 1

print(total)


3. 약수 찾기
정수 n의 약수는 n을 나누었을 때 나누어 떨어지는 수입니다. 만약 정수 i가 정수 n의 약수라면, n을 i로 나누었을 때 나머지가 0이 나와야 하는 거죠.
정수 120의 약수를 모두 출력하고, 총 몇개의 약수가 있는지 출력하는 프로그램을 써 보세요. 아래처럼 콘솔에 출력되어야 합니다.
```py
count = 0
i = 1

while i <= 120:
    if 120 % i == 0:
        print(i)
        count += 1
    i += 1


print("120의 약수는 총 {}개입니다".format(count))
  1. 택이의 우승 상금
    1988년 쌍문동에 사는 택이는 바둑 대회 우승 상금으로 5,000만원을 받았습니다. 하지만 바둑 외에는 아는 게 없으니, 이웃 어른들에게 이 돈으로 무엇을 해야 할지 물어보기로 하였습니다.
    은행에서 근무하는 동일 아저씨는 은행에 돈을 맡겨서 매년 이자로 12%씩 받는 것을 추천하셨습니다. 1년 후인 1989년에는 5,000만원의 12% 이자인 600만원이 더해져 5,600만원이 된다고 하면서요.
    이 이야기를 들은 미란 아주머니는 고작 12% 때문에 생돈을 은행에 넣느냐며, 얼마 전 지어진 은마아파트를 사라고 추천하셨습니다. 당시 은마아파트의 매매가는 5,000만원이었죠.
    2016년 기준 은마아파트의 매매가는 11억원인데요. 1988년 은행에 5,000만원을 넣었을 경우 2016년에는 얼마가 있을지 계산하여, 동일 아저씨와 미란 아주머니 중 누구의 말을 듣는 것이 좋았을지 판단해 보세요. 2016년 은행에 얼마가 있을지는 꼭 while문을 사용해서 계산해 주세요!
    2016년에 은행에 저축해 둔 금액이 더 크면, *원 차이로 동일 아저씨 말씀이 맞습니다.가 출력되도록 하세요. 반대로 은마아파트의 가격이 더 크면, *원 차이로 미란 아주머니 말씀이 맞습니다.가 출력되도록 하세요. 여기서는 꼭 if문을 사용해 주세요!
prize_money = 50000000
old_year = 1988
new_year = 2016
apartment_price = 1100000000

while old_year < new_year:
    prize_money = prize_money * 1.12
    old_year += 1

if prize_money >= apartment_price:
    print("{: .0f}원 차이로 동일 아저씨 말씀이 맞습니다.".format(prize_money - apartment_price))
else :
    print("{: .0f}원 차이로 미란 아주머니 말씀이 맞습니다.".format(apartment_price - prize_money))
  1. 피보나치 수열 **

  2. 구구단
    while문을 사용해서 구구단 프로그램을 만들어 봅시다. 실행하면 아래와 같은 결과물이 출력되어야 합니다.

    i = 1
    j = 1
    

while i <= 9:
while j <= 9:
print("{} * {} = {}".format(i, j, i*j))
j += 1
i += 1
j = 1

```

자료형

숫자형
  1. 숫자형:: 파이썬에서 정수형과 정수형의 연산은 정수형으로 나오고, 소수형과 소수형의 연산은 소수형으로 나온다.
    :: 그렇다면 정수형과 소수형의 연산은? 소수형 으로 연산된다.
    :: 나눗셈은 정수형, 소수형 상관 없이 소수형으로 연산되고, 정수형을 원한다면 형변환을 해야한다.
    :: 파이썬에서는 사칙연산 법칙이 적용된다.

  2. #덧셈 print(4 + 7) #11 #뺄셈 print(2 - 4) #-2 #곱셈 print(5 * 3) #15 #나머지 print(7 % 3) #1 #거듭제곱 print(2 ** 3) #8 #나눗셈 print(7 / 2) # 3.5 print(6 / 2) # 3.0 print(7.0 / 2) #3.5 print(6.0 / 2.0) #3.0

  3. 숫자형 심화파이썬에서 따옴표('', "") 안에 적은 모든 것들은 문자열로 표현된다.
    단, 규칙은 시작한 따옴표와 끝낼 따옴표는 같아야 한다.

  4. 문자열

  5. # floor division(버림 나눗셈): 나눈 결과 값에서 소수부분을 버린다! print(7 // 2) # 3 print(8 // 3) # 2 # 특이점: 버림 나눗셈을 할 때 한가지가 소수형이면 결과값도 소수형으로 나온다. print(8.0 // 3) #2.0 # round(반올림) round(숫자, 파라미터) 파라미터까지 반올림을 하여 나타낸다. print(round(3.145926535)) # 3 # round(반올림) print(round(3.145926535, 2)) # 3.14 # round(반올림) print(round(3.145926535, 4)) # 3.1459

  6. 문자열 연산 : 문자열을 연결해라, String Concatenation값을 한 자료형에서 다른 자료형으로 바꾸는 것을 의미한다.
    가령, 문자열->숫자형, 숫자형->문자열, 정수형->소수형, 소수형->정수형

  7. print('오늘은' + str(year) + '년' + str(month) + '월' + str(day) + '일입니다.') print('오늘은 {}년 {}월 {}일입니다.'.format(year, month, day)) #format을 이용한 문자열 포맷팅 #응용 date_string = "오늘은 {}년 {}월 {}일입니다." print(date_string.format(year, month, day)) # 동일한 결과값 출력 #포맷팅 응용: 출력 순서 바꾸기 print("저는 {},{},{}를 좋아합니다".format('jake','codeit','ENTJ')) print("저는 {1},{0},{2}를 좋아합니다".format('jake','codeit','ENTJ')) #포맷팅 응용: 소수점 절사 print('{0} 나누기 {1}은 {2}입니다.'.format(num_1, num_2, num_1 / num_2)) print('{0} 나누기 {1}은 {2: .2f}입니다.'.format(num_1, num_2, num_1 / num_2)) print('{0} 나누기 {1}은 {2: .4f}입니다.'.format(num_1, num_2, num_1 / num_2)) print('{0} 나누기 {1}은 {2: .0f}입니다.'.format(num_1, num_2, num_1 / num_2))

  8. format을 이용한 문자열 포맷팅

  9. 형변환(Type Conversion, Type Casting)

  10. print(int(3.8)) # 3 print(float(3)) # 3.0 print(int("2") + int("5")) #7 print(float("2") + float("5")) #7.0 print(str(2) + str(5)) #25 age = 7 print("제 나이는" + str(age) + "살 입니다") # 제 나이는 7살 입니다. print(int("Hello World")) # 오류 -> 논리적이지 않음

  11. print('7' + '6') # '76' print('Codeit') print('Jake') print('I'm excited to learn Python') # 오류 print('I\'m excited to learn Python') # 정상출력 print("I'm excited to learn Python") # 정상출력 print("Hello " + "World")

불대수

일상적인 논리를 수학적으로 표현한 것, 불 대수의 값은 진리값(True, False)이다.
불대수의 연산은(AND OR NOT)이 있다.
AND연산: x,y 모두 참일 경우에만 참

OR 연산: x,y 둘중 하나만 참이어도 참

NOT 연산: True -> False, False -> True로 변환

불린형
#불린 (Boolean): 따옴표 없이 작성
print(True)
print(False)
print(True and False)
print(True or False)
print(not True)
print(not False)
print(2 > 1)
print(2 < 1)
print(3 <= 3)
print(2 != 2)

*꿀팁
type을 적으면 무슨 타입인지 알 수 있다.

Type함수
print(type(3))
print(type(3.0))
print(type("3"))
print(type(True))
def Hello():
    print("Hello World")
print(type(Hello))
print(type(print))

추상화

변수 제대로 이해하기
name = '김성재'
x = 7 
x = x + 1 # 지정 연산자 (assignment operator)
print(x) # 8
x = 7
x = x - 3
print(x) # 4
함수의 실행 순서
#함수의 실행 순서
def hello():
    print('Hello')
    print("Welcome to Codeit")

print("함수 호출 전")
hello()
print("함수 호출 후")
print("=======================")
def square(x):
    return x * x

print("함수 호출 전")
print(square(3) + square(4))
print("함수 호출 후")

return문 제대로 이해하기

return문의 역할은?

  1. (함수가) 무언가를 돌려주는 것

  2. 함수를 종료시킨다.

    옵셔널파라미터

    파라미터에게 기본값(defaultValue)을 설정할 수 있고, 이를 '옵셔널 파라미터'라고 지칭합니다.
    단, 옵셔널파라미터는 무조건 마지막에 사용해야 합니다! 중간에 사용하면 에러발생합니다.

  3. def myself(name, age, nationality="한국"): print("내 이름은 {}".format(name)) print("나이는 {}살".format(age)) print("국적은 {}".format(nationality)) myself("코드잇", 1) # 옵셔널 파라미터를 제공하지 않는 경우 #출력 내 이름은 코드잇 나이는 1살 국적은 한국

  4. # return과 print의 차이 def print_square(x): print(x * x) # return None 생략되어있음. def return_square(x): return (x * x) print(print_square(3)) # 9 , None print(return_square(3)) # 9

  5. return과 print의 차이

  6. def square(x): print("함수 시작") return x * x print("함수 종료") ## 데드코드 print(square(3)) print("Hello Jake?")

Scope : 범위

상수

상수: constant
대문자로 사용하는 이유는

  1. 어떤것이 일반 변수인지, 상수 변수인지 확인하기 위해서입니다.
  2. 실수하지 않기 위해서입니다.(상수는 고정시켜 놓은 값이니까, 절대로 안바꾸겠다는 컨벤션이니까)
스타일

스타일이란 주관적인 것입니다. 코딩에도 스티일이 있고, 이해하기 쉬운 간결하고 깔끔한 코드가 좋은 스타일을 갖고 있음을 의미합니다.
화이트스페이스: 띄어쓰기나 빈줄 같은것을 의미합니다. 화이트 스페이스를 잘 활용하면 가독성을 높일 수 있습니다.
어느 누군가가 보더라도 이해할 수 있도록 작성하는 것. 함께 작업하는 사람들과 작업하는 것이니까.
(파이썬 스타일가이드 : PEP8[https://www.python.org/dev/peps/pep-0008])

파이썬스타일가이드 규칙

  1. 이름은 소문자로쓰고 스네이크케이스를 사용한다. 상수는 대문자로 작성한다.
  2. 화이트스페이스를 잘 활용한다.(들여쓰기 4공백, 함수마다 2개의 공백 줄, 연산자 앞뒤 화이트스페이스 한칸, 함수 안 화이트스페이스x ...)

제어문

while 반복문 개념

While반복문: 무언가를 반복하기 위해 사용합니다.
사람은 반복적인 일을 잘 하지 못합니다. 똑같은 일을 수행할 때 감정적이나, 신체적으로 피로감을 느끼기 때문입니다.

# while 반복문 구조
# while 조건 부분:
#       수행 부분
while 반복문 문법
# while 조건 부분:
#     수행 부분
# 조건 부분이 True면, 수행 동작을 실행하고 False면 멈춘다.


i = 1 
while (i <= 3):
    print("나는 잘 생겼다.")
    i += 1

if문 개념

만약과 그렇지 않으면... if else

# if 조건부분:
#    수행부분
# else:
#    수행부분
if문 문법
temperature = 8
if temperature <= 10:
    print("자켓을 입는다.")

temperature = 17
if temperature <= 10:
    print("자켓을 입는다.")
else:
    print("자켓을 입지 않는다.")
elif 문법 (else + if)
#if 조건부분:
#  수행부분
#elif 조건부분:
#  수행부분
#elif 조건부분:
#  수행부분
#else:
#  수행부분

파이썬 첫 걸음

파이썬 프로그래밍 소개

파이썬은 간단하고, 범용성이 높아 문제 해결 논리에 집중할 수 있는 언어입니다.

파이썬 프로그래밍 도구들

파이썬코드를 컴퓨터가 이해할 수 있게 하는 도구 : 파이썬 인터프리터

프로그래밍 기본 개념

코멘트

python에서는
: #으로 코멘트를 단다.
: 코멘트를 사용하는 이유

  1. 복잡한 코드 설명
  2. 하다가 만 부분 표시
  3. 다른 개발자들과 소통
자료형 개요
  1. DataType: 숫자
    : 정수(Integer) // 1,2,3,4,5,6
    : 소수(Floating Point) // 1.0, 2.0, 3.0, 4.0,
  2. DataType: 문자열 // "25", "2"
  3. DataType: 불린(Boolean) // True, False
추상화 개요

추상화(Abstraction) : 복잡한 내용은 숨기고, 주요 기능에만 신경쓴다는 의미

  1. 변수(Variable) : 값을 저장하는 것

    x = 254 , y = 317,
    print(x+y)
  2. 함수(Function) : 명령을 저장하는 것

    print("Hello World")
  3. 객체(Object)

변수
print(4990)
print(4990*2)
print(4990 + 1490)
print(4990*3 + 1490*2 + 1250*5)

현 코드의 문제점은 무엇일까?

  1. 다른 개발자가 봤을 때 어떤 의미인지 모를 수 있다.
  2. 휴먼에러가 발생할 가능성이 매우 높다.
  3. 유지보수하기 엄청 어렵다.(가격 변동 시 모두 바꿔줘야 함)
    이 문제를 해결하기 위해서는 '변수'개념을 사용해야함.
burger_price = 4990
potato_price = 1490
beverage_price = 1250
print(burger_price)
print(burger_price*2)
print(burger_price + potato_price)
print(burger_price*3 + potato_price*2 + beverage_price*5)
  1. 다른 개발자가 봤을 때 어떤 의미인지 알 수 있음.
  2. 휴먼에러가 발생할 가능성이 낮아짐
  3. 유지보수 하기 쉬워짐
함수

기본 제공 함수는 내장함수라 지칭합니다. 내장함수를 제외하고는 직접 만들어야 합니다.

# 함수만들기
# 1. def
# 2. 함수명 + ():
# 3. 명령할 동작 코딩
def hello(): 
    print("Hello!")
    print("Welcome to CodeIt")        
hello()
파라미터
# 파라미터
# name 을 Parmameter라고 지칭함
# 함수 안에는 argument 겠군! ㅎ
def hello(name): 
    print("Hello!")
    print(name)
    print("Welcome to CodeIt") 
hello("Jake")
여러개의 파라미터
# 파라미터를 여러개 쓰고 싶다면 파라미터 - 쉼표 + 스페이스 - 파라미터 ... 식으로
def print_sum(a, b):
    print(a+b)
    print(a*b)
print_sum(1,3)

# 응용하기 ㅎ
def print_sum(a, b, c=0):
    print(a+b)
    print(a*b)
    print(a+b+c)
print_sum(1, 3 )
print_sum(1, 3, 4)
# 문제: 세 수의 곱
# 코드를 작성하세요. 
def multiply_three_numbers(num1, num2, num3):
    print(num1 * num2 * num3)

# 테스트 코드
multiply_three_numbers(7, 3, 5)
multiply_three_numbers(21, 4, 9)
multiply_three_numbers(-7, 6, 3)
return문

함수의 핵심 기능 중 하나.
함수에게 어떤 정보를 줬을 경우, 어떤 정보를 돌려주는 것을 의미함.

컴파일러와 인터프리터

애플리케이션: 사용자가 직접 사용하는 프로그램
컴퓨터,휴대폰에서 실행하는 애플리케이션의 갭이 줄어들고 있다.(= 사용하는 애플리케이션이 같아지고 있다.)

애플리케이션은 프로그래밍 코드에 의해서 실행되는데 어던 소프트웨어가 프로그래밍코드를 애플리케이션으로 바꿔주기 때문에 가능할까?
:: 컴파일러 / 인터프리터

프로그래밍 언어의 번역기, 컴파일러

한 언어의 코드를 다른 언어의 코드로 바꿔주는 것을 컴파일러 라고 부른다.
컴파일러의 단점은 머신코드를 이해하기 어렵다는 것입니다. 그래서 코드를 일부 작성 후 실행 하여야 하고 이는, 빠르게 개발하기 어렵습니다.
컴파일러의 단점(컴파일의 과정)을 보완하기 위해서 인터프리터가 만들어 졌습니다.인터프리터는 코드 즉시 실행기입니다.
컴파일러는 모든것을 해석하고 코드를받아 실행하도록 하지만, 인터프리터는 한줄 한줄 해석하면서 컴퓨터에 전달해 실행한다.

운영 체제 개요

애플리케이션을 도와주는 프로그램, 운영체제

OS(Operating System) // 윈도우10, MacOS, Linux, Android, iOS

왜 모든 컴퓨터에는 운영체제가 필요할까?

운영체제의 역할
  1. 입력과 출력 관리
    : OS는 입출력장치와 애플리케이션을 연결해준다.
  2. 저장과 불러오기
    : 무엇인가를 저장하고 불러오는 저장장치가 있다.
    : 휘발성 / 비휘발성 장치가 있다.
    : 컴퓨터가 켜져 있는 동안에만 보관 (RAM) / 컴퓨터가 꺼져도 저장 (HARD DISC)
    : 각 상황과 목적에 맞게 '저장과 불러오기'를 OS가 수행한다.
  3. 여러 프로그램 동시에 빠르게 실행하기
    : OS는 여러 프로그램들이 동시에 실행되는 것(멀티태스킹)을 관리하여 준다. 가령, 음악을 들으면서 게임을하고 영화를 다운로드받고..
운영체제의 종류
  1. 데스크탑/랩톱 : Windows, MacOS, Linux
  2. 모바일 : Android, iOS
  3. 서버 : 컴퓨터, Google Drive, Server(Ubuntu, Unix, Linux, .. )
  4. 임베디드 : 실생활 및 다방면으로 활용됨
운영체제의 발전 역사

UNIX(1970년 출발: 시초) -> UNIX표방 OS 대거 생성 -> POSIX(공식UNIX마크) 생성 -> ... -> UNIX-like => GNU/Linux 생성

Linux -> 최다인원 프로젝트에 참여한 OS, 누구나 사용 가능하고, 누구나 변형 가능하다.(오픈소스)

네이티브 애플리케이션과 웹 애플리케이션

플랫폼의 파편화

플랫폼: 프로그램이 실행되는 하드웨어, 소프트웨어 환경을 의미한다. 각 플랫폼에 맞게 프로그램을 만들어야 합니다.
CPU 종류가 다르면, 실행되지 않음을 '플랫폼 의존성' 이라 말합니다.
애플리케이션의 경우, 운영체제 및 하드웨어를 모두 고려해야하기 때문에 작업하기 어렵다. 그래서 플랫폼 의존성에 의해 특정 플랫폼을 포기하는 경우가 많다.
이를 '플랫폼 파편화'라고 지칭하기도 합니다.

표준의 필요성

플랫폼의 파편화를 해결하기 위해서 세계는 "표준"을 설정했습니다.
("이런식으로 프로그래밍 코드를 만들게, 이렇게 사용할 수 있도록 만들게~")

크로스플랫폼
  1. 가상머신
    Java가 가상머신 JVM을통해서 소프트웨어 규격을정해서 프로그램을 설계하는 예시를 들 수 있습니다.

  2. 웹 개발자는 웹 브랑우저에 맞는 규격에 맞춰 프로그램을 설계합니다.사용자 환경에 맞게, 반응형으로 레이아웃을 설계한다.(반응형 웹 디자인)
    단, 웹의 단점은 브라우저 호환성문제가 있습니다.

:: 크로스플랫폼은 파편화의 문제를 해결하기 위해 나온 개념으로, 하나의 프로그램만으로 여러 플랫폼에서 실행 할 수 있는 것을 의미합니다.
다양한 플랫폼 위에 소프트웨어로 만든 또 하나의 컴퓨터를 실행시켜서 다양한 플랫폼을 마치 하나의 컴퓨터처럼 만드는 것입니다.

네이티브 애플리케이션 & 웹 애플리케이션

웹을 활용해 애플리케이션처럼 활용하는 것을 웹 애플리케이션이라 지칭합니다.
그리고 웹 앱과 구분하기 위해 앱에서 사용하는 앱플리케이션을 네이티브 애플리케이션이라고 지칭합니다.

웹을 활용하는 여러가지 방법

웹의 기술이 발전하고 활용가능한 범위가 많아짐에 따라 SPA, Hybrid Web App[정해진 특정 공간만 바꿔서 렌더링해준다(광고)],
PWA(Progressive Web App)들이 등장하여서 많은 서비스들이 생겨나고 있습니다.

'CodeIt! > 컴퓨터개론' 카테고리의 다른 글

프로그래머 세계 이해하기  (0) 2023.03.09
프로그래밍 언어 이해하기  (0) 2023.03.09
프로그래밍 오버뷰  (0) 2023.03.08

프로그래밍의 다양한 분야

컴퓨터 사이언스의 기본기

객체지향프로그래밍, 알고리즘, 자료구조는 모든 프로그래밍 언어의 기초입니다.

소프트웨어 공학

소프트웨어로 제품/서비스를 만드는 공학(프로세스)[기획-개발-테스트-배포-유지/보수]

프로세스 관리

WaterFall / Agile 방식이 있습니다.
Waterfall의 단점은 결과물이 나와야 문제점을 발견할 수 있고, 발견했다면 갈아 엎어야 하니 문제가 많아질 수 있습니다.
Agile방식은 Waterfall의 단점을 극복하기 위해, 유연한 대처를 하기위해서 만들어진 방식입니다. 단 Agile방식은 프로젝트 방식이 복잡해질 수 있습니다.

테스트 프로세스

자동화 테스트 도구나 테스트 코드를 통해서 테스트 단계를 가집니다.
현업에서 테스트 과정은 버그 관리 툴을 통해 (지라,트렐로,아스나) 버그를 발견 시 이슈를 만들어 제보하여 공유합니다.
이슈의 상태 [오픈 - 인프로그레스 - 리졸브 - 클로즈 - 리오픈] 및 Assign(담당자)를 배정하여 해결합니다.

버전관리

프로그래밍하다보면, 코드 수정은 잦게 발생합니다. 변화에 따라 어떤의도로, 어떤코드를 수정했는지 확인하는 방법을 알기 위해서 '버전관리'를 합니다.
이는, Git, Github를 통해서 관리합니다. Git을 활용해 버전을 나눠서 Branch별 기기별 관리를 할 수 있으며, 개발자들과 협업하기 위해서는 꼭 알아야하는 필수 역량입니다.

개발자들의 필수 프로그램 IDE(통합개발환경: Integrated Development Environment)

개발자들이 코딩할 때 도움이 되는 기능을 모아둔 프로그램 (VScode, IJ)
IDE의 장점: 작업시간을 압도적으로 낮춰 시간을 효율적으로 사용할 수 있다.

트렌드를 읽는 능력

프로그래밍은 선택의 연속
트렌드를 읽는 방법
  1. 좋은 언어, 프레임워크, 기술을 쓰면 커뮤니티가 활발해지고 이는 선 순환체계를 이룹니다.
  2. 인정받는 기술을 확인한다.
    : 회사들이 어떤 기술들을 사용하고 있는지, 요구하는지 확인한다.
    : 유명한 회사의 블로그를 참고한다.
  3. 유망한 기술들을 확인한다. (Trend Tech)

'CodeIt! > 컴퓨터개론' 카테고리의 다른 글

소프트웨어 이해하기  (0) 2023.03.09
프로그래밍 언어 이해하기  (0) 2023.03.09
프로그래밍 오버뷰  (0) 2023.03.08

+ Recent posts