Python

파이썬을 배워보자(1) - Python 설치 및 실행 방법 and 객체지향 언어(Python의 장단점, Java와 비교)

Chokeys 2023. 6. 19. 16:15

출저: https://velog.io/@ohwani/why-python

 

 

파이널 프로젝트가 끝나고 한 일주일간 느슨해진거 같다. 자바와 자바스크립트는 이제 기초를 땐 수준이지만, 나는 목표가 AI쪽으로 개발을 하는 것이기에 파이썬 외에도 C, C++ 배울 언어들이 많다. 하나의 언어를 배웠다고 한다면 100%는 아니더라도, 85%정도는 할 줄 알아야 할 것이다. 그러므로 파이썬도 누군가에게 설명할 수 있을 만큼은 배워야 한다.

 

0. 시작하기에 앞서.... 

 

Python에 대해서 글을 시작하기 전에 먼저 파이썬이란 어떤 언어인지 알아야 할 것 같다. 왜 인기가 있는지 java와는 무슨 차이가 있는지 어느 분야에서 쓰는건지 등 많은 질문을 해볼 생각이다.

 

0-1. Python 이란?

 

파이썬은 개발언어 중에서 현시점으로 가장 인기있는 언어이다. 막 차이가 두세배 나는건 아니고, 다양한 개발언어들이 자신에게 맞는 분야에서 활발히 쓰이고 있다. 그래도 13.45%의 비율로 1등에 자리에 있는 파이썬은 왜 개발자들에게 인기가 많은걸까? 분명 이유가 있으니깐 많이 쓸것이다. 왜 그런지 알아보도록 하자.

 

출처: https://www.tiobe.com/tiobe-index/

 

0-2. Python 의 특징

 

1. 파이썬의 본질은 웹개발쪽이지만 *웹 크롤링 처럼 무언가를 반복시키고, 자동화 시키는데 특화된 언어이다

 

  * 웹크롤링: 웹페이지에 널려져있는 데이터들을 프로그래밍적으로 추출하는 행위를 말한다.

                     웹사이트들을 돌아다니면서 정보를 수집하는 행위.

                     html/css/javascript로 구성된 웹사이트에서 규칙을 분석해, 우리가 원하는 정보들만 뽑아서 가져

                     오는 것을 웹 크롤링 작업이라고 한다. 

 

지금 내가 블로그를 쓰면서 정보를 수집하는 것도 일종의 웹크롤링이 아닐까?

 

요즘은 웹크롤링을 막고 있는 사이트가 많다고 한다. 너무 과도하게 크롤링을 하면 서버 과부화가 걸릴 수 있다. 계속 유지하는 것은 법적으로도 문제가 생길 수 있다.

 

2. 파이썬은 응용분야가 넓다

 

  - 웹 프로그래밍 뿐만 아니라 인공지능과 데이터 분석, GUI 프로그래밍, 시스템 유틸리티 제작등 다양한 분야에서 사용되어질 수 있다.

(유틸리티란 컴퓨터를 사용하는 데 도움을 주는 여러 가지 소프트웨어를 말한다.)

 

3. 웹개발용으로 만들어 졌지만, 다양한 연동 프로그램으로 컴퓨터용 매크로 생성, 단순업무 자동화

 

   - 대표적으로 엑셀을 자동화로 만들어서 편리하게 사용

 

4. 파이썬은 다른 개발 언어들보다 훨씬 단순한 구조 만들어진 개발 언어이다

 

- 파이썬에서 개발하다보면 코드의 구조가 아주 간단하다는 것을 알 수 있다. 자바로는 5줄이 나오는 코드도 파이썬에서는 2줄이면 해결할 수 있다. 아래 코드를 보자

 

<자바>
public class Main1 {

	public static void main(String[] args) {

		int i = 0;// 반복문 임시변수
		for (i = 1; i <= 5; i++) {// 1 2 3 4 5 6(x)
			System.out.println(i + "  ");
		}

이렇게 자바는 하나하나 다 명시를 해줘야한다.(숫자의 타입도...)

<파이썬>
for i in range(1,6):
    print(i,end="")
    
파이썬에는 단 두줄만 가지고 원하는 값을 출력할 수 있다.

 

- 파이썬은 사람이 생각하는 방식을 그대로 표현할 수 있는 언어이다. 컴퓨터의 사고방식에 맞추는게 아닌 개발자가 원하는대로 코드를 짜고 구현할 수 있다.

 

5. 파이썬은 스크립트 언어 / 인터프리터 언어이다.

 

  - 인터프리터 언어란 소스 코드를 한 줄씩 해석한 후 그때그때 실행해 결과를 바로 확인할 수 있는 언어를

    말한다.

 

  - 파이썬은 스크립트 언어로 *컴파일 과정없이 인터프리터에 의해 실행 결과를 바로 확인하고 수정하며

    코드를 작성할 수 있다.

* 컴파일 : 인간이 작성한 코드를 컴퓨터가 이해할 수 있도록 기계어(바이너리 코드)로 번역하는 과정
                 java나 c++같은 경우 컴퓨터가 이해할 수 있도록 코드를 컴파일 하여 기계어로 번역 후에
                실행시 기계어로 번역된(컴파일된) 파일을 실행
                하지만, 스크립트 언어는 이런 컴파일 과정없이 실행과정에서 번역과 실행이 동시에 일어나므로                              수정이 빠르지만 컴파일 언어보다 느린 실행속도를 보여준다.

 

 

6. 또한 파이썬 프로그램은 공동 작업과 유지 보수가 매우 쉽고 편리하다.

 

  - 파이썬 자체가 코드가 간단 명료하게 되어있는 느낌을 받았다. (직관적이라해야하나?) 그 덕분에 다른 사람이 작업한 소스 코드를 이해하기 쉽고 공동 작업과 유지 보수가 매우 편리하다.

 

8. 문법이 쉬워 빠르게 배울 수 있다.

 

"Life is too short, You need python." (인생은 너무 짧으니 파이썬이 필요해.)

 

엄청나게 빠른 파이썬의 개발 속도 때문에 유행처럼 퍼진 말이다

 

- 파이썬은 생산성이 높다. 즉, 쉽고 간결한 문법 덕분에 빠르게 개발이 가능하며 더 적은 코드로 더 많은 작업 수행이 가능하다. 또한, 복잡한 구문으로 인한 오류 발생을 줄일수 있다.

 

 

9. 파이썬에는  코드의 줄을 맞추는 ‘들여쓰기’라는 것이있다.

 

  - 파이썬은 들여쓰기를 하지 않으면 프로그램이 실행되지 않는다. 자바처럼 단락을 구분하는 괄호 "({  })"가 없다. 그래서 코드를 짜면서 줄을 잘 맞춰줘야한다.(들여쓰기 처리)

 

 

8. 파이썬은 오픈 소스(open source)이므로 무료이다. 

 

   - 오픈 소스란 저작권자가 소스 코드를 공개하여 누구나 별다른 제한 없이 자유롭게 사용·복제 ·배포·수정할 수 있는 소프트웨어를 말한다.

 

- 파이썬은 수많은 라이브러리 뿐만 아니라 오픈소스를 통해 많은 개발자들이 사용하는 언어를 그대로 사용할 수 있다.

 

 

9. 파이썬은 동적타입언어이다.

 

- 파이썬은 동적 타입언어로 변수의 자료형을 지정하지 않고 선언하는 것만으로 값을 지정할 수 있다.
이렇게 선언한 변수의 자료형은 코드가 실행되는 시점에 결정된다.

 

ex) 자바 -> int /long /float /String 등 변수의 타입을 맨 처음애 적고 만듬

      파이썬 -> 그냥 변수명만 적는다. -> 실행하면서  들어있는 값을 보고 알아서 타입을 결정

 

 

10. 파이썬은 플랫폼에 상관없이 어느 환경에서도 쓸 수 있다.

 

파이썬은 대부분의 운영체제에서 모두 동작하는 언어이다. 윈도우, 리눅스, 맥 등 운영체제에 따라 컴파일할 필요가 없기때문에 어떤 환경에서도 활용이 가능하다.

 


 

0-2. Python 의 단점 

 

1. 주력언어가 되기 힘들다.

 

  - 파이썬은 자바보다 안전성이 부족하고, C/C++ 보다 속도가 느리다. Java같은 경우 변수를 지정할때 int, float, long등 타입을 지정하여 좀 더 안전하게(전체적으로 좀 든든한 느낌?) 개발을 진행할 수 있지만 Python은 타입을 지정하지 않고 javascrip처럼 var, let으로 변수 타입을 통일하기 때문에 Java보다는 안전성이 부족하다.

 

2. 다른 언어보다 느리다.

 

파이썬은 다른 컴파일 언어에 비해 느리다. 스크립트 언어이기 때문에 실시간으로 기계어로 번역하다보니 이런 단점이 발생하며, 따라서 빠른 속도를 요구하거나 하드웨어를 직접 컨트롤 하는 프로그램에는 적합하지 않은 언어이다.

 

3. 모바일 개발에서 사용이 어렵다.

 


0-3. Python은 객체지향 언어인가? 

 

파이썬은 "객체지향 언어"가 맞다. 그리고 지금까지 내가 주력으로 배웠던 자바도 객체지향 언어이다. 근데 나는 객체지향을 제대로 알고 있는가? 객체지향 언어가 뭔지도 제대로 모르면서 자바를 쓰고있었다니....(물론 어느정도는 알고 있었다) 그래서 이번 기회에 좀 더 자세하게 객체지향이라는 개념에 대해서 공부하고자 한다.

 

자바의 절반은 객체라고 해도 될 만큼 자바에서 객체지향이라는 개념은 중요하다. 도대체 객체(object)란 무엇인가? 객체는 모든 것 즉, 살아있는 생물 혹은 사물 이 모든 것을 객체라고 한다. 그리고 프로그래밍에서 객체는 데이터의 분산을 막기 위해 데이터와 기능을 하나로 묶은 "그룹"이라고 말할 수 있다.

 

그러면 객체지향 ((O)bject (O)riented (L)anguage)은 무엇인가? 한줄로 요약하면 명령어들로 이루어진 목록이 아니라 하나하나의 독립된 "객체"들의 그룹 이라고 생각하면 된다. 그리고 그 객체들간의 메시지를 주고 받음으로서 쉽게 연결이 가능하다. (메서드를 통해 객체끼리 메시지를 전송)

 

함수랑 필드를 묶어서 하나의 클래스로 만들고, 여러가지 기능들을 모아 놓은 클래스들이 각각의 object라고 할 수 있다. (모듈, 클래스, 함수...) 그리고 개발을 진행하면서 마치 조립 컴퓨터 처럼 쓰고 싶은 object를 끼워 사용하는것이다.

 

 

 

객체지향언어의 특징 

 

 

1. 캡슐화(Encapsulation) : 클래스의 내부변수와 메소드를 하나로 패킹징하는 것.

 

  - 객체에 선언된 변수나 메소드가 구분없이 중구난방으로 접근할 수 있다면 정상적인 객체로 보기 어렵다.

 

  - 비슷한 개념으로 정보은닉이라는것이 있는데 객체의 내부구현을 숨김으로써 객체가 반드시 정해진

    메소드를 통해 상호작용 하도록 유도한다.

 

  - 이 두 개념은 객체의 응집도와 독립성을 높임으로써 객체의 모듈화를 지향한다. 객체의 모듈화가 잘 이루어졌을 경우 모듈 단위의 재사용이 매우 용이해진다. 여러 로직에서 중복되는 코드를 모듈로 대체하면 모듈 내부의 소스만 수정하는 것으로 수정사항을 반영할 수있다.  -> 이는 곧 간편한 유지보수와 직결된다.

 

JAVA는 4가지 "접근제어자"를 통해 캡슐화, 은닉화를 구현한다.

 

 ① public : 다른 객체에서 해당 객체의 인스턴스를 생성하여 접근할 수 있다.

 ② protected : 해당 객체를 상속받은 객체 내부에서만 접근 가능하다. 단순 인스턴스에서는 접근 할 수 없다.

 ③ default : 동일한 패키지 내의 객체에서 인스턴스를 생성하여 접근할 수 있다.

 ④ private :  선언된 객체 내부에서만 사용 가능하며, 외부에선 어떠한 방법으로든 해당 지시자를 가진 변수 혹은 메소드를 사용할 수 없다.

 

2. 상속(Inheritance) : 객체가 다른 객체를 상속받아 상속받은 객체의 요소를 사용하는것을 말한다. 객체를 상속받은 객체는 자식, 상속된 객체는 부모라고 칭한다. 자식 객체는 상속된 부모 객체의 은닉화 구성에 따라 정해진, 변수 메소드에 접근할 수 있다. 

 

3. 다형성(Polymorphism) : 객체지향 언어는 동일한 이름을 가진 메소드를 허용하지 않는다. '걷는다' 라는 동작이 구현되는 메소드가 있다고 하면, '걷는다'라는 동작은 하나만 존재하면 된다. 굳이 2개를 맏들필요가 없는 것이다. 이처럼 객체지향 언어에서 메소드는 고유의 기능을 가지고 있고, 고유의 이름을 가지는 것이다.

 

# 하나의 파라미터는 반드시 하나의 타입만을 가진다!!

 

그러면 동일한 메소드는 존재할 수 없으니 , 해당 메소드에 입력할 수 있는 각각의 파라미터 타입도 하나로 고정되는 건가? 아래 코드를 한번 보자.

 

public class test {

    public static void main (String[] args){
        
        System.out.println("문자를 출력하자");
        System.out.println(931207);
        System.out.println(false);

    }
    
    <출력결과>
    문자를 출력하자
    931207
    false

 

동일한 이름을 가지 메소드는 동일한 객체에서 존재할 수 없다.

근데 "System.out.println" 는 메소드명은 동일한데 문자, 숫자, boolean 까지 여러형태의 파라미터를 처리한다. 이처럼 하나의 메소드가 여러타입을 처리할 수 있는 이유는 '다형성'이 적용되었기 때문이다.

 

다형성이란? 하나의 객체 혹은 메소드가 여러 타입을 참조할 수 있음을 의미한다.

다형성은 크게 체의 다형성메소드의 다형성으로 구분하는데 이 부분에 대해서는 다음에 좀 더 자세하게 파볼 생각이다. 이번 글에서는 객체지향의 다형성이라는 특성 때문에 동일한 이름의 메소드가 사용될 수도 있다 정도만 알고 가야겠다.

 

4. 추상화(Abstraction) : 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말한다. 추상화를 설명하기에 가장 적합한 용어는 *인터페이스(interface)이다

 

* 인터페이스란? 어떤 객체의 역할만을 정의하여 객체들 간의 관계를 보다 유연하게 연결하는 역할을 담당. 

 

이렇게 정의를 할 수는 있는데... 간단하게 설명하면 공통된 기능을 수행하는 메소드들을 객체 하나하나 마다 생성하는게 아니라, 공통된 기능들이니 그냥 하나로 묶어놓고 상속받아  필요한 것을 꺼내 쓰는것이다.

 

 

게임 캐릭터를 생성하는 것이 좋은 예가 될듯하다. 게임 캐릭터들은 각각 직업이 달라도 공통적으로 가지는 기능들이 있다.(전직을 하든, 각성을 하든 공통적으로 가지는 기본 작)

 

" space bar : 점프, <- : 왼쪽,  -> : 오른쪽, x: 공격, 숫자1: 포션 ... 이런 기본동작" 

 

이처럼 캐릭터를 생성할 때마다 해당하는 기본동작이 되는 코드들을 전부 다시 만드는게 아니라, basic function (기본기능)이라는 interface를 만들어 놓고, 캐릭터라는 class를 만들때 가져다가 쓰는것이 추상화의 특징이자 상속과의 특징도 잘 설명하는 예시이다.

 


 

 절차지향 vs 객체지향  

 

 

예시1)

 

출저 : https://blog.kakaocdn.net/dn/FIGKA/btqB7ccVaWY/inuj73Q7k676k06D4AKwc0/img.png

 

 

예시2)

 

출저: https://easyupclass.e-itwill.com/data/file/ea66d53d9b101ba212a93f16b7c24c39.png

 

 

위에 그림은 구글에서 관련 이미지를 찾아 본건데 그림으로 보니깐 훨씬 이해하기가 쉬웠다. 그래서 글로는 간단하게 요약한다.

 

 

1. 절차지향 언어

 

  - 함수를 만들고 순차적으로 프로그램이 동작하는 방식 

 

  - 장점: 객체나 클래스를 만들 필요없이 원하는 순서대로 코딩 가능, 프로그램 흐름을 쉽게 추적가능

 (근데 프로그램 흐름을 쉽게 추적할수 있다고 하는데, 이건 오히려 구조적으로 정렬되어지는 객체지향 언어쪽이 더 추적하기 쉽지않나? 하는 생각이 든다)

 

  - 단점: 코드끼리 유기성이 높아서 새로운 데이터나 기능을 추가하기 어렵다. 코드를 재사용 불가하다보니 후에 유지보수 작업이 어렵다.

 

2. 객체지향 언어

 

 - 각 객체에서 수행할 수 있는 함수랑 필드를 묶어서 하나의 클래스로 만들고, 기능을 객체로 만들어 동작하는 방식

 

- 장점 : 캡슐화로 인해 유지보수 용이, 객체자체가 하나의 프로그램이기 때문에 상속처럼 코드 재상용 용이

 

- 단점 : 많은 양의 메모리를 사용해서 속도가 느리다, 설계하는데 시간이 필요하다.

 


 

0-3. 그래서 Python 과 Java 뭐가 다른데? 

 

차이점을 말한다면 둘다 다른 언어 이기에 한국어 vs 영어 처럼 언어가 가지는 본질 자체가 다를 수 도 있다. 하지만 두 언어는 "객체지향 언어라는 공통점"을 가지면서 여러가지 차이점을 가진다. 그래서 깊게 들어가서 개념 자체를 파헤치는건 어려워 보이고.. 가장 큰 차이점들만 모아서 정리해 놓아야겠다.

 

1.  Python은 인터프리터 언어이고, Java는 컴파일 언어이다.

 

 ▶ 인터프리터언어는 컴파일을 커쳐서 기계어로 번역되지 않고 바로 실행이된다. 

 ▶ 반면 컴파일 언어는 기계어로 번역되는 과정을 거쳐야한다.

 

2. Python이 다른언어에 비해 느리다는 인식이 있는데, Java의 경우 코드가 길어지면 컴파일하는데 그만큼 시간이 길어져 Python보다 느릴 수 있다.

 

3. Python은 동적타이핑 언어이고,  Java는 정적타이핑 언어이다.

 

  - 자바는 변수를 사용하기 위해 변수의 타입을 지정해줘 하지만, 파이썬은 동적유형이기에 변수 타입을 선언할 필요가 없다.(런타임에 의해 타입이 결정된다.)

 

4. Java는 객체지향의 언어의 특징에 맞게 코드를 한줄 작성하더라도 위에서부터 모듈 -> 클래스 -> 함수 -> 변수 이렇게 생성해야 하지만, Python은 객체지향 언어이더라도 그러한 과정이 없다.

 

 

왼쪽이 Java에서 쓰여진 코드고, 오른쪽이 Python에서 쓰여진 코드다.  자바는 모든 변수에 타입을 지정해줘야 원하는 값을 얻어낼 수 있지만, 파이썬은 변수의 타입을 지정하지 않고 쓰고싶은 내용을 적으면 된다. 이게 바로 정적언어와 동적언어의 차이다. 같은 출력값인데도 사용하는 코드의 줄이 확연히 차이가 난다.

 

 

아래 블로그에서 도움을 받았다.

https://pearlluck.tistory.com/632#recentEntries

 

Python과 Java 차이점 | 객체지향vs절차지향

면접에서 자주 물어보는 기초 질문이라 한번 정리해보려고 한다. 뭔가 보수적인 회사(?) 또는 코딩테스트가 없어서 개발능력을 팩트체크해보려고 할 때 아래처럼 질문을 받았다. Q: 자주 사용하

pearlluck.tistory.com

 


1. Python 설치

 

① 깃허브에서 Python공부를 위한 새로운 Repositorie를 만들자

 

 

 

 

* gitignore를 선택하는 항목이 있는데, 일단 선택해야할건 내가 현재 사용할 언어를 선택해준다. 설명을 하자면 git이라는게 변경점을 추적하는 녀석이고, ignore은 원격저장소에 저장할 요소 말고는 무시를 하겠다는 거다. 선택을 하게 되면 아래 사진과 같이 깃허브에서 자동으로 gitignore파일을 만들어 준다.

 

내용을 보면 여러가지가 적혀있는것을 볼 수 있는데, build, downloads...등이 있는걸로 봐서 저장소에서 굳이 관리 안해도 되는 파일들은 무시하겠다고 명시해주는게 아닌가 싶다. 그것을 깃허브에서는 자동으로 Python 템플릿으로 만들어 놔서 우리가 편하게 사용하는 것 같다.

 

 

② 다운받아야 할 것이 2개가 있다. 먼저 Python 최신버전을 다운받는다.

 

 

홈페이지에 가서 최신버전 3.11.4를 다운 받는다.

 

 

Add python.exe to PATH를 체크하고 Customize installation을 누른다.

 

 

Documentation을 체크 해제 해준다.

 

 

Install Python 3.11 for all users을 체크 해주는데 체크 해주게 되면 밑에 경로가 바뀌는걸 확인 할 수 있다

 

 

 

Install을 눌러주고 설치가 성공적으로 끝나면, 마지막에 Disable path length limit를 눌러주면 완료다

 

 

③ cmd(명령 프롬프트)에서 파이썬의 버전과 경로, 실행이 잘 되는지 체크를 해보자

 

cmd에서 python환경으로 설정

 

- python --version을 입력하면 현재 파이썬의 버전이 뜨고

- pip --version을 입력하면 파이썬이 설치되어 있는 경로와 버전 둘다 뜬다.

 

얘는 화질이 왜 이래 나오지..

 

import sys -> sys. executable -> print('Hello python')을 차례대로 입력해본다.

=> 'Hello python'을 잘 출력한다. 

 

 

밑에 python 버전이 적혀있는 곳을 클릭하면 위에 저렇게 인터프리터를 선택할 수 있는 창이 뜬다. 거기서 최신버전을 3.11.4 버전을 선택하자.

 

 

④ vsc코드에서 Pythone 확장 플러그인을 다운받아준다.

 

 

vsc는 정말 플러그인이 잘 되어있다는것을 다시 한번 느낀다.

 

 

이렇게 뒤에 .py를 붙이면 python파일이 생성된다.

 

★ 치여진게  주로쓰는 함수들이고, 그외에 여러가지 클래스와 함수들을 제공한다.

 

 

⑤ 이제는 python을 사용할 준비가 되었다.

 

 

 

[ 도움주신 사이트 ]

https://blog.itcode.dev/posts/2021/08/08/encapulation

https://radait.tistory.com/4

https://velog.io/@jnine/%ED%8C%8C%EC%9D%B4%EC%8D%ACPython-%ED%8A%B9%EC%A7%95-%EB%B0%8F-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EC%A0%95%EB%A6%AC

https://wikidocs.net/

https://choseongho93.tistory.com/264

 https://scshim.tistory.com/552

https://velog.io/@nawhes_joo/Python-%EA%B0%95%EC%9D%98-day-2