프로그래밍이란 무엇일까?

2025. 10. 23. 20:25·자바

프로그래밍이란 무엇일까?

프로그래밍이란 컴퓨터에게 특정 작업을 수행하라고 명령하는 과정이다.
이때 우리가 작성하는 명령의 집합을 바로 ‘프로그램’이라고 부른다.

예를 들어 문서 작성 프로그램은, 우리가 문서를 편집할 수 있도록 컴퓨터에게 “글자를 화면에 표시하고 저장하라”고 지시하는 프로그램이다.
즉, 프로그래밍은 사람의 의도를 컴퓨터가 이해할 수 있는 방식으로 표현하는 일이라고 할 수 있다


컴퓨터는 어떻게 프로그램을 이해할까?

컴퓨터는 사람이 쓰는 언어를 이해하지 못한다.
컴퓨터는 오직 0과 1로 이루어진 기계어(Machine Code) 만 이해 할수 있다.

하지만 사람이 0과 1로만 된 코드를 직접 쓰는 건 너무 비효율적이고 어렵다.
그래서 사람이 이해하기 쉬우면서도 기계어로 변환하기 쉬운 언어 즉 프로그래밍 언어(Programming Language) 가 등장했다.
그리고 이 언어를 이용해 프로그램을 만드는 사람을 프로그래머(Programmer) 라고 한다.


프로그래밍 언어의 종류

프로그래밍 언어는 실행 방식에 따라 크게 두 가지로 나눌 수 있다.

컴파일러 언어

프로그램 전체를 한 번에 번역해 실행 파일을 만든 뒤 실행하는 방식이다
대표적으로 C, C++ 같은 언어가 이에 해당한다

  • 실행 속도가 빠르다는 장점이 있지만, 수정 후에는 다시 컴파일해야 한다는 단점이 있다.

인터프리터 언어

코드를 한 줄씩 읽고 바로 실행하는 방식이다
대표적으로 Python, JavaScript 등이 있다

  • 빠른 테스트나 유연한 개발에는 좋지만 속도는 상대적으로 느릴 수 있다.

절차지향 vs 객체지향

프로그래밍 언어는 프로그램을 설계하는 방식에 따라 절차지향 언어(Procedure Oriented Programming) 와 객체지향 언어(Object Oriented Programming) 로 나눌 수 있다.
이 두 가지 패러다임은 프로그램을 구성하고 문제를 해결하는 철학 자체가 다르다.
하나는 “무엇을 먼저, 어떤 순서로 처리할 것인가”에 초점을 맞추고, 다른 하나는 “누가(객체)가 어떤 역할을 수행할 것인가”에 집중한다.


절차지향 언어 (Procedural Language)

프로그램을 여러 절차(함수) 로 나누어 순서대로 실행하는 방식이다.
대표적으로 C 언어가 이에 해당한다.
마치 요리 레시피처럼 1단계 → 2단계 → 3단계 순서로 코드를 실행한다.


절차지향 언어의 특징

  • 순서(Flow)가 핵심이며, 명령 실행 순서를 중심으로 설계됨
  • 함수(function) 가 프로그램의 기본 단위
  • 데이터와 함수를 분리해서 다룸
  • 재사용성이 낮고 규모가 커질수록 유지보수가 어려움
  • 함수 간 의존도가 높아져, 코드 수정 시 연쇄적인 영향이 발생할 수 있음

객체지향 언어 (Object-Oriented Language)

객체지향 언어는 절차지향과 정반대의 시각에서 출발한다.
“무엇을 할지(절차)”보다 “누가 할지(객체)”가 더 중요하다는 관점이다.

프로그램을 여러 개의 객체(Object) 로 나누어 구성하고 각 객체는 데이터(상태) 와 메소드(행동) 를 함께 가진다.

예를 들어
자동차 객체 → 속도, 연료량(데이터) + 출발하기, 멈추기(행동)

학생 객체 → 이름, 학번(데이터) + 출석하기, 시험보기(행동)

이렇게 객체들이 서로 메시지를 주고받으며 협력하는 구조가
바로 객체지향 프로그래밍(OOP, Object-Oriented Programming)의 핵심이다.

대표적인 객체지향 언어로는 Java, C++, Python, Kotlin 등이 있다.


객체지향 언어의 특징

  • 캡슐화(Encapsulation)

    • 데이터를 외부에서 직접 접근하지 못하게 막고 메소드를 통해서만 접근하도록 제한하는 개념이다.
      예를 들어 자동차의 엔진 내부 구조는 모르더라도 운전자는 액셀러레이터와 브레이크 기능을 조작할 수 있다.
      이게 바로 캡슐화의 핵심이다.
  • 상속 (Inheritance)

    • 기존 클래스(부모)의 속성과 기능을 새로운 클래스(자식)가 물려받는다. 공통 코드를 재사용할 수 있고 기능을 손쉽게 확장할 수 있다.
      예를 들어 ‘동물’ 클래스를 상속받은 ‘강아지’ 클래스는 ‘움직인다’는 기능을 그대로 갖고, ‘짖는다’ 같은 추가 기능만 구현하면 된다.
  • 다형성 (Polymorphism)

    • 같은 이름의 메소드가 상황에 따라 다르게 동작하도록 만드는 개념이다.
      예를 들어, draw()라는 메소드는 ‘원’ 객체에서는 원을, ‘사각형’ 객체에서는 사각형을 그리도록 동작할 수 있다.
      이 덕분에 코드의 유연성과 확장성이 크게 높아진다.
  • 추상화 (Abstraction)

    • 복잡한 시스템에서 핵심적인 부분만 드러내고, 나머지는 숨기는 개념이다. 예를 들어 운전자는 자동차를 운전할 때 엔진의 작동 원리를 몰라도 되듯
      개발자도 복잡한 내부 구조 대신 필요한 인터페이스만 다루면 된다.

Java와 객체지향

Java는 객체지향 프로그래밍의 철학을 가장 충실히 반영한 언어 중 하나이다
기본 타입(int, float 등)을 제외한 거의 모든 것이 객체이며 모든 코드는 클래스 안에 존재한다.

Java는 캡슐화, 상속, 다형성, 추상화 — 이 네 가지 핵심 개념을 중심으로 설계되어 있어 대규모 시스템 개발에 최적화된 구조를 제공한다
특히

  • 캡슐화를 통한 정보 은닉

  • 상속으로 인한 코드 재사용

  • 다형성을 통한 유연한 설계

이런 요소들이 잘 어우러져 Java는 웹 백엔드, 안드로이드 앱, 기업용 서버 등에서 여전히 사랑받고 있다.


마무리 – 절차지향과 객체지향, 어느 쪽이 더 좋은가?

사실 정답은 없다.
프로그램의 규모와 목적에 따라 다를 뿐이다.

작고 단순한 프로그램은 절차지향이 빠르고 효율적일 수 있고 복잡하고 유지보수가 필요한 시스템이라면 객체지향이 훨씬 적합하다.

결국 중요한 건 ‘언어’보다 ‘사고방식’이다.
절차지향이든 객체지향이든 핵심은 문제를 명확히 이해하고 논리적으로 해결하는 힘이라고 생각한다.

저작자표시 비영리 (새창열림)

'자바' 카테고리의 다른 글

Java Class 하위에 변수를 몇개까지 선언할 수 있을까?  (0) 2025.11.11
[JVM 완전정복 #1] JVM 구성요소 총정리: 가상 머신이 자바 코드를 실행하는 비밀  (0) 2025.11.11
프로그래밍 언어의 시작 – 고급어와 저급어의 이해  (0) 2025.11.04
객체지향 프로그래밍(Object-Oriented Programming)  (1) 2025.10.28
자바 메모리 구조(기초) — Stack / Heap / Method Area  (2) 2025.09.22
'자바' 카테고리의 다른 글
  • [JVM 완전정복 #1] JVM 구성요소 총정리: 가상 머신이 자바 코드를 실행하는 비밀
  • 프로그래밍 언어의 시작 – 고급어와 저급어의 이해
  • 객체지향 프로그래밍(Object-Oriented Programming)
  • 자바 메모리 구조(기초) — Stack / Heap / Method Area
깊은바다속꼬북이
깊은바다속꼬북이
  • 깊은바다속꼬북이
    CodeBlossom
    깊은바다속꼬북이
  • 전체
    오늘
    어제
    • 분류 전체보기 (53) N
      • 라이징 캠프 (4)
      • 객채지향 개발론 (3)
      • 스프링 (10) N
      • 네트워크 (2)
      • 자바 (16)
      • 자료구조 (3)
      • 운영체제 (0)
      • 데이터베이스 (4)
      • 디자인패턴 (7)
      • JSP (1)
      • 개발 알쓸신잡 (2)
      • 일반 교양 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그램밍 언어
    템플릿 메서드 패턴(Template Method Pattern)
    jvm 클래스 로더
    자료구조
    한국어 검색
    java 버전별 특징
    GC
    객체지향
    싱글턴 패턴(Singleton Pattern)
    jit-compiler
    mockito라이브러리
    개발 철학
    java data area
    자바 Socket 클래스
    MySQL 옵티마이저
    개발 교훈
    백엔드
    전략 패턴(Strategy Pattern)
    스프링
    JUnnit5
    디자인 패턴
    spring
    어댑터 패턴(Adapter Pattern)
    JVM
    트랜잭션 전파레벨
    개발자 철학
    junnit5프레임워크
    디자인패턴
    java
    MySQL 파서
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
깊은바다속꼬북이
프로그래밍이란 무엇일까?
상단으로

티스토리툴바