오늘 빌드하는데 에러가 떴길래 봤더니, 갑자기 멀쩡한 클래스를 못 불러오고 있었다.

어제까지만해도 임포트 잘 되던건데 왜일까, 하고 찾아보니 언제 빌드 할때 jar파일이 꼬인 것 같았다.

스택오버플로우에 같은 문제에 대한 답변이 있어 답변대로 프로젝트를 Clean시켰더니 에러가 사라졌다.

 

문제내용

소스코드에서 특정 자바 클래스 import가 안되는 현상

'the import 클래스 cannot be resolved'

 

해결된 방법

이클립스 Project > Clean > Clean all projects 

 

 

 

참조 페이지

https://stackoverflow.com/questions/4322893/eclipse-error-the-import-xxx-cannot-be-resolved

1. 접근 제한자

: 자바에서는 접근 제한자를 설정하여 해당 클래스(혹은 메소드 등)의 사용 권한을 설정할 수 있다.

예로 자바 메인 메소드를 살펴보면,

// 자바 메인 메소드
public static void main(String[] args) {
	/* 
    	public = 공개되는 ( 어디서나 접근이 가능한 ) 메소드라는 뜻
	static = 정적 메소드 선언
    	void = return 값이 없음 
        */
}

위와 같이 메인 메소드는 외부에서도 사용할 수 있도록 public으로 선언된 걸 알 수있다.

접근 제한자를 사용하는 목적으로는 무분별한 클래스 호출을 막으면서 해당 멤버나 데이터를 보호하는 것에 있다.

 

 

2. 각 키워드에 따른 접근제한

public서부터 하위 그룹으로 갈수록 접근 가능한 클래스가 적어진다.

 

위 그림과 같이 자바의 접근 제한자로는 public, protected, default, private가 있다.

최상위 집합으로 볼 수 있는  public은 외부에서 자유롭게 사용할 수 있도록 공개되는 멤버를 만들고, 하위 접근 제한자로 갈 수록 접근 가능한 멤버들이 줄어든다.

 

public

: 클래스, 필드, 생성자, 메소드에 적용이 가능하고, public으로 선언된 멤버는 외부 클래스에서 자유롭게 접근할 수 있다.

예 ) 라이브러리 클래스

protected

: 필드, 생성자, 메소드에 적용이 가능하고, 같은 패키지나 자식 클래스에서만 접근 할 수 있다.

private

: 필드, 생성자, 메소드에 적용이 가능하고, 선언된 클래스 내부에서만 접근이 가능하다.

default

: 클래스, 필드, 생성자, 메소드에 적용이 가능하고, 같은 패키지에서만 접근할 수 있다.

위 세가지 접근 제한자 (public, protected, private)로 지정되지 않으면 자동으로 default로 선언된다. 


클래스의 접근 제한자

클래스에서는 public과 default 접근제한자만 사용이 가능하다.

해당 위치에서 접근 불가능한 클래스를 호출하려 하면 컴파일 에러가 뜬다.

 

생성자의 접근 제한자

생성자는 public , protected, default, private 접근 제한자를 사용가능하다.

생성자의 기본 접근제한자는 클래스의 접근제한자를 사용하게 된다. 

 

 

 

 

1. 포트(Port)란?

운영체제 통신의 종단점(End Point)을 말한다[각주:1].  

포트는 포트번호로 구별되며, 포트번호로 포트유형을 식별할 수 있다.

TCP/IP에서는 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방식으로 사용된다.

 

2. 포트번호

TCP와 UDP에서 상위 계층에 제공하는 주소 표현 방식 중 하나이다.

원하는 서버의 프로세스에 접속하려면 해당 서버의 IP주소와 포트 번호를 알아야 한다.

인터넷에서 자주 사용하는 응용서비스들은 고정된 포트 번호가 있는데, 이것은 Well-known 포트라고 해서 전 세계의 모든 컴퓨터가 동일한 포트 번호를 사용하도록 권고되고있다.

서비스 포트 번호
HTTP 80
DNS 53
Telnet 23

UDP와 TCP는 서로 다른 포트 주소 공간을 사용하므로 포트 번호가 겹쳐도 된다. 즉, 서로 다른 프로토콜이기 때문에 동일한 포트 번호를 할당해도 서로 다른 포트 번호로 간주된다.

 

 

 

참고문헌

위키백과 '포트 (컴퓨터 네트워킹)'

https://ko.wikipedia.org/wiki/%ED%8F%AC%ED%8A%B8_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9) 

 

포트 (컴퓨터 네트워킹) - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

두산백과 '포트' https://terms.naver.com/entry.naver?docId=1213147&cid=40942&categoryId=32848 

 

포트

모뎀과 컴퓨터 사이에 데이터를 주고받을 수 있는 통로. 컴퓨터에서 포트는 크게 두 가지 의미를 지닌다. 첫째는 컴퓨터의 주변장치를 접속하기 위해 사용되는 연결 부분을 의미한다. 대개 소켓

terms.naver.com

네이버 지식백과 '포트 번호' https://terms.naver.com/entry.naver?docId=2271915&cid=51207&categoryId=51207 

 

포트 번호

포트(Port) 번호는 TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식이다. 유닉스 환경에서는 소켓으로 포트를 구현하므로 TCP/UDP를 사용하려면 소켓 시스템 콜의 인터페이스를 알아야 한다. 소켓(S

terms.naver.com

 

  1. 논리적 접속장소를 말한다. [본문으로]

자바는 변수[각주:1]를 선언할 때, 데이터 타입을 결정하며 선언하게 된다.

int age; // 초기화 하지 않은 변수 age, 데이터 타입은 int
String name = "피그십" // 초기화 한 String 변수

 

기본 타입이란?

원시[각주:2] 타입이라고도 한다. 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입이다.

 

1 ) 정수

byte 1byte (=8bit)
short 2byte
int 4byte
long 8byte

정수형 데이터 타입을 선언 할 때에는 데이터의 최대 크기를 고려해야한다. 범위를 벗어난 값을 저장하면 overflow가 발생하여 인접한 다른 값이 저장되기 때문이다. cf) underflow [각주:3]

 

2) 실수

  메모리 크기 유효 자릿수
float 4byte 소수 부분 6자리까지 표현가능
double 8byte 소수 부분 15자리까지 표현가능

3) 문자

작은 정수나 문자 한 자를 표현하는 타입을 말한다.

char 2byte

컴퓨터 프로그래밍에서는 2진수로 표현하기에 문자를 표기할 때는 일종의 약속이 필요하다.

C와 C++에서는 아스키 코드로 문자를 표현하고, JAVA에서는 유니코드로 문자를 표현한다.

아스키 코드로는 영문자와 숫자밖에 표현이 안 되지만, 유니코드는 다양한 나라의 언어를 표현 할 수 있다.

 

4) 논리형

boolean 1byte

기본 값은 false이다.

 

 

 

참고문헌

신용권, 「이것이 자바다 1」, 한빛미디어, 2020

TCP스쿨 '기본타입' http://www.tcpschool.com/java/java_datatype_basic

  1. 하나의 값을 저장할 수 있는 메모리 공간 [본문으로]
  2. Primitive [본문으로]
  3. 해당 타입이 표현할 수 있는 최소 범위를 넘어버린 경우 [본문으로]

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

객체지향 프로그래밍 (OOP: Object-Oriented Programming) 은 컴퓨터 프로그래밍 패러다임의 한 종류 이며, 객체(Object)와 객체(Object)간의 메시지 전달을 통해 프로그래밍을 구현하는 방식이다. 특징으로는 객체지향으로 짜인 프로그램은 유연하고 변경이 쉽고 강한 응집력(Strong Cohesion)과 약한 결합력(Weak Coupling)을 지향한다.[각주:1]

 

2. 요소

객체(Object)
클래스의 인스턴스 개체(Entity) 현실 세계의 본질
속성(Attribute) 자료 저장소 (cf.변수)
메소드(Method) 호출 단위 (cf.함수)
클래스(Class) 객체를 생성하는 추상 메소드 타입
메시지(Message)  객체 간의 통신

 

3. 특징

 

자료 추상화

불필요한 정보는 숨기고 중요 정보만 표현하며 프로그램을 간단히 만드는 것.

 

상속

기존 클래스의 자료와 연산을 새로운 클래스에서 사용할 수 있게 하는 기능.

일반적으로 상속 받는 클래스를 자식 클래스(하위 클래스)라고 하며, 상속하는 클래스를 부모 클래스(상위 클래스) 라고 한다. 클래스 간의 종속 관계를 형성하여 객체를 조직화 하는 역할을 한다.

 

다중 상속

하나의 클래스가 2개 이상의 클래스로 부터 상속받을 수 있게 하는 기능.

 

다형성 
한 요소에 여러 개념을 넣어 놓은 것. [각주:2]

 

동적 바인딩

런타임 중 변경 될 수 있는 바인딩을 말한다. 

 

4. SOLID

로버트 마틴이 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙의 앞글자를 딴 것을 말한다.

유지보수와 확장이 쉬운 프로그램을 개발하기 위한 원칙이다.

 

SRP 단일 책임 원칙(Single Responsibility Principle)

"한 클래스는 하나의 책임만 가져야 한다."

 

OCP 개방 폐쇄 원칙 (Open Closed Principle)

"소프트웨어 요소는 확장에는 열려있어야하나, 변경에는 닫혀있어야 한다."

 

LSP 리스코프 치환 원칙 (Liskov Substitution Principle)

"프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다."

 

ISP 인터페이스 분리 원칙 (Interface Segregation Principle)

"특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다."

 

DIP 의존관계 역전 원칙 (Dependency Inversion Principle)

"프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다."

 

 

 

참조문헌

NCS 정보처리기술사 연구회,「수제비 정보처리기사 실기vol.1」,건기원,2021

위키백과 '객체 지향 프로그래밍' https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

위키백과 'SOLID (객체 지향 설계)' https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84) 

 

SOLID (객체 지향 설계) - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

  1. 하나의 목적으로 데이터를 모아놓은 데이터형을 사용하고, 클래스간 독립적인 디자인을 하기 때문이다. [본문으로]
  2. 오버라이딩, 오버로딩이 있다 [본문으로]

1. 자바 프로그램이 실행되는 과정

Write once, run everywhere

자바의 특징 중 하나는 운영체제에 종속적이지 않고 JVM만 갈아 끼우면 어디서든 실행 할 수 있다는 점이다.

JVM이란 자바 가상 머신으로, 바이트 코드로 컴파일 된 자바 소스코드를 OS위에서 실행시켜주는 가상 머신이라고 보면 된다. 자바 코드가 실행되는 과정은 아래와 같다.

자바 프로그램 실행 순서,  pigSheep

자바 코드는 자바 컴파일러에서 바이트 코드[각주:1]로 컴파일 되기 때문에 운영체제에서 바로 실행시킬 수가 없다. 그래서 자바코드는 최종적으로 JVM[각주:2]내에서 실행 되는 모양새인데, 이는 운영체제마다 프로그램을 실행하고 관리하는 방식이 다르기 때문에 각 운영체제마다 별도로 프로그램을 개발하는 것 보다 운영체제와 자바 프로그램 사이의 매개체(JVM)을 두어 하나의 코드로 다양한 운영체제에서 실행가능하게 만든 설계다. 그래서 바이트 코드는 모든 JVM에서 동일한 실행 결과를 보장한다.

 

 

2. JDK와 JRE

 

Java SE(Standard Edition)의 구현체로 JDK(Java Development Kit)와, JRE(Java Runtime Environment)가 있다.

JDK는 단어 그대로 자바 프로그램 개발을 위한 툴 킷으로 보면 되고, JRE는 자바 프로그램의 실행환경을 제공해주는 키트이다.

JDK와 JRE, pigSheep

 

참고문헌

신용권, 「이것이 자바다 1」, 한빛미디어, 2020

  1. 완전한 기계어가 아니다 [본문으로]
  2. 자바를 실행시키기위한 가상의 운영체제로 보면 쉽다. [본문으로]

+ Recent posts